[Python-de] problem beim importieren

Mike Mueller pyp at gmx.net
Don Feb 23 17:26:34 CET 2006


Halo Bastian,

At 15:07 23.02.2006, you wrote:
>Hallo Liste,
>
>ich hab hier ein (Anfänger)Problem beim Importieren. Meine
>Verzeichnisstruktur sieht so aus:
>
>.
>`-- src
>     |-- main.py
>     |-- p1
>     |   |-- __init__.py
>     |   `-- foo.py
>     |-- p2
>     |   |-- __init__.py
>     |   `-- main.py
>     `-- unittest
>         `-- footest.py
>
>
>und die src/p2/main.py so:
>
>#!/usr/bin/env python
>
>from p1 import foo
>
>[...]
>
>Ich möchte also von p1/main.py aus p2/foo.py importieren.

Anders herum?

von p2/main.py aus p1/foo.py importieren


>Wenn ich nun in src python p2/main.py ausführe bekomme ich:
>
>src$ python p2/main.py
>Traceback (most recent call last):
>   File "p2/main.py", line 3, in ?
>     from p1 import foo
>ImportError: No module named p1
>
>
>Ich würde also gerne wissen wie ich von p2/main.py aus p1/foo.py
>importieren kann.
>
>Ich hab gelesen, dass dieses Problem im Januar schon mal gefragt wurde,
>aber das scheint hier nicht zu helfen.
>
>Ich habe schon relativ viel rumprobiert, z.B. eine __init__.py in src
>anzulegen und dann versucht mit import src.p1.foo, bzw. from src.p1
>import foo und vielen anderen Permutationen. Langsam geht mir aber die
>Puste aus.


Dein Modul muss im PYTHONPATH stehen. Das 
aktuelle Arbeitsverzeichnis gehört offensichtlich 
nicht dazu. Ich kenne 4 verschiedene Methoden das zu erreichen:

1.) p1 einfach in das Verzeichnis Python2x/Lib/site-packages kopieren,
2.) eine Datei p1.pth unter site-packages mit Inhalt "/../src/p1" erstellen,
3.) in main.py den Pfad per 
sys.path.append('/.../src') dynamisch hinzufügen oder
4.) Die Umgebungsvariable PYTHONPATH setzen z.B.:
export PYTHONPATH=$PYTHONPATH:/.../src

Alle Methoden haben etwas unterschiedliche 
Anwendungsfelder, je nachdem was du willst. In 
das Verzeichnis site-packes würde ich zum 
Beispiel nur kopieren, wenn das Modul (vorerst) 
fertig ist. sys.path.append ist sehr dynamisch 
lässt sogar ein programmatisches Setzen des 
Pythonpfades zu. Die *.pth-Datei ist auch recht 
elegant. Das Setzen von PYTHONPATH in der Shell 
funktioniert wie die Handhabung von Umgebungsvariable PATH.

Siehe auch

http://www.python.org/doc/tut/node8.html

oder in Deutsch

http://starship.python.net/crew/gherman/publications/tut-de/online/tut/node8.html

Hoffe es hilft weiter.

Mike