[Python-de] Projektorganisation revisited

Stefan Schwarzer sschwarzer at sschwarzer.net
Fre Jul 25 21:04:26 EDT 2003


Hi Gerson,

Gerson Kurz wrote:
 > Ich möchte nochmals auf das Thema Projektorganisation in Python zu sprechen
 > kommen
 > [...]
 > 1) Abhängigkeiten der Module
 >
 > Beispiel. Ich möchte aus
 >
 > irgendwas/PyEMU/protokoll_1/blabla.py
 >
 > eine Funktion in
 >
 > irgendwas/PyEMU/misc.py
 >
 > aufrufen. Dann muß ich schreiben (immer vorausgesetzt, daß <irgendwas>
 > bereits in den PYTHON_PATH aufgenommen wurde)
 >
 > import PyEMU.misc
 > PyEMU.misc.funktion()
 >
 > Wenn ich statt dessen in
 >
 > irgendwas/PyEMU/blabla.py
 >
 > bin, kann ich direkt schreiben
 >
 > import misc
 > misc.funktion()

Vorsicht! Aus Sicht von Python sind damit PyEMU.misc und misc zwei
_unterschiedliche_ Module. Meistens geht das gut, aber ich bin mit so
etwas mal im Zusammenhang mit isinstance(obj, cls) auf die Nase gefallen
und schreibe seitdem brav überall dieselben Import-Befehle, bzw. alle
bezogen auf dasselbe Verzeichnis im PYTHONPATH :-)

Tipp: in sys.modules schauen

Im folgenden Beispiel entsprechen cache und tools.cache derselben
Quelltextdatei. Der unten stehende Abschnitt ist aus einem laufenden
Interpreter geschnippelt (bis auf den gekürzten Pfad in
sys.modules['tools.cache']).

 >>> import cache
 >>> import tools.cache
 >>> import sys
 >>> sys.modules['cache']
<module 'cache' from 'cache.pyc'>
 >>> sys.modules['tools.cache']
<module 'tools.cache' from '/.../tools/cache.pyc'>
 >>> c = cache.Cache()
 >>> isinstance(c, tools.cache.Cache)
0
 >>> class Cache2(tools.cache.Cache): pass
...
 >>> issubclass(Cache2, cache.Cache)
0

Ob mir zu deinen anderen Fragen noch etwas Hilfreiches einfällt, muss
ich mal sehen.

Viele Grüße
   Stefan