python "mozgatható" package készítése

Írtam egy package-t, ami szépen működik, de elég bénán építettem fel a hierarchiáját - import-ok keresztbe kasul és amúgy se mondható rendezettnek. Keresem a módot, hogy miként lehetne olyan package-t írni, ami egy másikba ágyazva is ugyanúgy működik, mintha csak egymagában használnám. Ez alapjába véve nem is lenne gond, de szeretném a közös cuccokat az __init__.py-be tenni és itt jön a probléma, ugyanis ha import pack-kal használom, akkor a pack.kozos_cucc néven elérem ezeket a függvényeket/változókat, viszont a from pack import * nem tölti be őket.

Persze, a válasz egyszerű, miért nem használom az első megoldást és minden elé kiírom a csomag nevét? Azért, mert a tkinter is az __init__.py-ben tárolja a legtöbb objektumát, mégis működik az import tkinter és a from tkinter import * egyaránt, tehát valszeg én vagyok képzetlen.

Mi a szabványos módja annak, hogy egy csomagon belül hivatkozzak a saját __init__.py-re, és hogy az abban található deklarációkat a main fájl a fent említett import módok közül bármelyikkel elérje?

EDIT:

Hogy gyakorlati példán is mutassam:


______________________________ KÖNYVTÁRSZERKEZET _____________________________

main.py
pack/
  __init__.py
  egyik.py
  subpack/
    __init__.py
    masik.py

___________________________________ FÁJLOK ___________________________________

__ MAIN.PY ____________________________

  import sys
  import pack
  import pack.egyik
  import pack.subpack
  import pack.subpack.masik

  print( sys.modules[ __name__ ] )

  print( pack.var )
  pack.egyik.fgv()

  print( pack.subpack.var )
  pack.subpack.masik.fgv()

__ PACK/__INIT__.PY ___________________

  import sys

  __all__ = [ 'egyik' ]

  var = sys.modules[ __name__ ]

__ PACK/EGYIK.PY ______________________

  import sys
  import pack

  def fgv():
    print( sys.modules[ __name__ ], pack.var )

__ PACK/SUBPACK/__INIT__.PY ___________

  import sys

  __all__ = [ 'masik' ]

  var = sys.modules[ __name__ ]

__ PACK/SUBPACK/MASIK.PY ______________

  import sys
  import pack.subpack

  def fgv():
    print( sys.modules[ __name__ ], pack.subpack.var )

__________________________________ KIMENET ___________________________________

<module '__main__' from 'foo\main.py'>
<module 'pack' from 'foo\pack\__init__.py'>
<module 'pack.egyik' from 'foo\pack\egyik.py'> <module 'pack' from 'foo\pack\__init__.py'>
<module 'pack.subpack' from 'foo\pack\subpack\__init__.py'>
<module 'pack.subpack.masik' from 'foo\pack\subpack\masik.py'> <module 'pack.subpack' from 'foo\pack\subpack\__init__.py'

Az import tkinter és a from tkinter import * dolgot félreérthettem, mert a fenti példában mindkét módon működik az '__init__.py'-kben lévő deklarációk importálása.
Azt akarom elérni, hogy ha nem a 'main.py', hanem az 'egyik.py' a fő fájl, amiből indítoma progit, akkor is működjön az 'egyik' és a 'subpack' és mindkettő lássa a 'subpack/__init__.py'-ben deklarált változókat, osztályokat, függvényeket. Ehhez viszont az kell, hogy képes legyen dinamikusan importálni a saját '__init__' fájlját és a 'subpack'-ot is, mert ha ez nem így történne, az import pack.subpack-ot kézzel kéne átírni import subppack-ra és ez szerintem nem épp professzionális megoldás.

Hozzászólások

Egyelőre még ez tűnik a leghasználhatóbb megoldásnak, de az exec-ben nem bízok meg túlzottan és amúgy is szigszalagos megoldásnak tűnik, szóval biztos van erre normálisabb mód is, de mindenesetre ez a megoldás a modult tartalmazó package nevével tér vissza:


packname = __name__ .split( '.' )
del packname[-1]
packname = '.'.join( packname )

if packname:
  exec( 'import ' + packname )

--
A kényszer helyett a tudásvágy vezessen a tanulásban!

Én se értem, mit is szeretnél pontosan. Esetleg ha írnál egy _komplett_ példát valami hibaüzenettel...
--
♙♘♗♖♕♔

A tények azt mutatják, hogy én magyarázok érthetetlenül... (-_-')

Írtam egy programot, amin belül létrehoztam egy package-be ágyazott "subpackage"-t. A program kibővült, átalakult és az a helyzet állt fel, hogy a "subpackage" egy könyvtárral feljebb kell, hogy kerüljön, viszont ehhez a "subpackage" moduljaiban lévő import utasításokat át kell írnom, mert a modulok útvonala megváltozott ugyebár. Ugyan ezt megtehetem kézzel is, de mivel ilyen probléma máskor is felmerülhet, egy általánosabb megoldást keresek, ami mindig a megfelelő import utasításokat fogja használni, bárhol is legyen a "subpackage" a könyvtárszerkezetben a "main" fájlhoz képest.
--
A kényszer helyett a tudásvágy vezessen a tanulásban!