[Python-de] Modul von anderswo laden?

Rene Liebscher R.Liebscher at gmx.de
Fri Mar 8 09:04:29 EST 2002


Matthias Urlichs wrote:
> 
> Hallo,
> 
> ich habe hier ein Modul, nennen wir es foo.bar. Wenn ich es verwenden
> will, sag ich folglich "import foo.bar". So weit so gut.
> 
> Dummerweise ist das Ding in meiner Entwicklungsumgebung ganz
> woanders, d.h. die Datei heisst "libtest/bar.py". Damit findet python
> natürlich nix. Die Frage lautet nun: kann ich dem import-Statement
> das Ding trotzdem unterschieben, ohne die Datei woandershin zu
> kopieren oder mit Symlinks rumzuspielen?
Du kannst dein Verzeichnis mit in den Suchpfad für Module aufnehmen.
Umgebungsvariable PYTHONPATH, oder in Python sys.path
http://python.sourceforge.net/devel-docs/lib/module-sys.html

> 
> Zweite Frage: Ich bin gerade dabei, Dinge zu importieren, die sich
> als nicht-Module entpuppen...
Wozu brauch man sowas?

> 
> foo/__init__.py:
> import foo._bar
> bar=_bar.magie()
> 
> foo/_bar.py:
> def magie():
>      return "Dies ist magisch."
> 
> foo/bar.py:
> import sys
> import foo
> sys.modules["foo.bar"]=foo.bar
> 
> ... und schon ist, nach einem Import von foo.bar, der Wert ebendieses
> "foo.bar" ein String. Das funktioniert soweit perfekt, hat nur den
> kleinen Nachteil, dass auch ein nackter "import foo" immer auch
> foo._bar lädt und magie() aufruft, obwohl ich das möglicherweise
> diesmal gar nicht brauche.
Das liegt daran beim Import auf jeden Fall das __init__.py des Modules 
abgearbeitet wird.

> 
> Die Frage lautet also: Gibt es eine Möglichkeit, in einem Modul
> festzustellen, welche Variablen von ihm verlangt werden?
> (Killerargument für ein solches Feature: mit Perl geht es. ;-)
Vermutlich nicht, wenn ich mal den letzten Abschnitt von
http://python.sourceforge.net/devel-docs/ref/import.html
richtig interpretiere, werden die Module von links nach rechts der Reihe
nach importiert.
Und beim Import des Modules/Package ist noch nicht bekannt das hinterher
dort
nach einem Namen gesucht wird.

Rene Liebscher



More information about the Python-de mailing list