[Python-de] Modul von anderswo laden?

Matthias Urlichs smurf at noris.de
Fri Mar 8 11:12:51 EST 2002


Hi,

Janko Hauser:
> > 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?
> > 
> import sys
> sys.path.append('path_to_libtest/libtest')
> import bar

Dummerweise habe ich aber einen "import foo.bar".

Es scheint so, als müsste ich da mit "import imp" anfangen und mir das
import-Statement selber stricken.  :-/


> Das ist ja gerade das Killerargument gegen Perl :-). Ich denke auf
> Modul-Ebene gibt es nur __all__ womit du bestimmen kannst, welche Namen
> ein Modul exportiert. Das ist aber wohl nicht dynamisch. Wenn du
> wirklich solche Tricks machen musst, dann versuche dir eine
> Factory-Klasse zu bauen, da kannst du alles moegliche einbauen. Aber das
> Programm wird dadurch wahrscheinlich nicht besser verstaendlich.
> 
Machen müssen tue ich solche Tricks natürlich nicht. Aber ich finde es
einfach bequemer, dass ich sagen kann

from foo import bar

wobei "bar" eine Klasse ist, die aber nicht in foo.py bzw. foo/__init__.py
lebt. Momentan kann ich damit leben, dass bei einem

import foo.was_anderes

foo.bar auch mit geladen wird, aber wenn das System größer wird dann kann
das zu einem Problem werden. Hmm. Auch ein Fall für "import imp".


Der Grund, wieso ich das alles mache, ist übrigens, dass ich ein in Perl
geschriebenes Programm ersetzen will  ;-)  und keine Lust habe, die
durchaus funktionierende Struktur dieses Programms mehr als nötig über den
Haufen zu werfen. (Start eines Testprogramms (mit mysql-Datenbankzugriff):
Perl 1.6sec, Python 0.2sec.)

-- 
Matthias Urlichs     |     noris network AG     |     http://smurf.noris.de/



More information about the Python-de mailing list