Wie kann dieser ImportError-Fehler richtig behoben werden?
Ich habe folgende Verzeichnisstruktur:
/home/bodacydo
/home/bodacydo/work
/home/bodacydo/work/project
/home/bodacydo/work/project/programs
/home/bodacydo/work/project/foo
Und ich bin im Verzeichnis
/home/bodacydo/work/project
Nun, wenn ich tippe
python ./programs/my_python_program.py
Ich bekomme sofort
ImportError: No module named foo.tasks
Das ./programs/my_python_program.py
enthält die folgende Zeile:
from foo.tasks import my_function
Ich kann nicht verstehen, warum Python nicht findet ./foo/tasks.py
- es ist da.
Wenn ich es von der Python-Shell aus mache, dann funktioniert es:
python
>>> from foo.tasks import my_function
Es funktioniert nur nicht, wenn ich es per python ./programs/my_python_program.py
Skript aufrufe.
__init__.py
nur an, dass das Verzeichnis als Paket behandelt werden soll, wenn sich das übergeordnete Verzeichnis entweder insys.path
einem Paket befindet oder selbst ein Paket ist.export PYTHONPATH=`pwd`
/home/bodacydo/work
... siehe diese AntwortHaben Sie eine Datei
__init__.py
im Verzeichnis foo? Wenn nicht, erkennt Python foo nicht als Python-Paket.Weitere Informationen finden Sie im Abschnitt zu Paketen im Python-Tutorial.
quelle
__init__.py
. Das Problem war diesmal mit$PYTHONPATH
. Ignacios Lösung hat funktioniert.Hier ist eine schrittweise Lösung:
Fügen Sie ein Skript mit dem Namen
run.py
in/home/bodacydo/work/project
und bearbeiten es wie folgt aus :(Ersetzen Sie
main()
durch Ihre entsprechende Methode inmy_python_program
.)/home/bodacydo/work/project
run.py
Erläuterung: Da Python an PYTHONPATH den Pfad des Skripts anhängt, von dem es ausgeführt
run.py
wird , wird das Ausführen angehängt/home/bodacydo/work/project
. Und voilà ,import foo.tasks
wird gefunden.quelle
Beispiellösung zum Hinzufügen der Bibliothek zu Ihrem PYTHONPATH.
Fügen Sie die folgende Zeile in Ihr ~ / .bashrc ein oder führen Sie sie einfach direkt aus:
Verknüpfen Sie dann Ihre gewünschte Bibliothek mit Ihrem ~ / .python-Ordner, z
quelle
Eine bessere Lösung als die Einstellung
PYTHONPATH
ist die Verwendungpython -m module.path
Dies wird korrekt eingestellt
sys.path[0]
und ist eine zuverlässigere Möglichkeit, Module auszuführen.Ich habe eine schnelle writeup über dieses Problem, da andere Beantworter den erwähnten Grund dafür ist ,
python path/to/file.py
setztpath/to
am Anfang derPYTHONPATH
(sys.path
).quelle
In meinen Gedanken muss ich berücksichtigen, dass der
foo
Ordner eine eigenständige Bibliothek ist. Ich könnte in Betracht ziehen, es in denLib\site-packages
Ordner innerhalb einer Python-Installation zu verschieben. Vielleicht möchte ich dort einefoo.pth
Datei hinzufügen .Ich weiß, dass es eine Bibliothek ist, da
./programs/my_python_program.py
die folgende Zeile enthält:Es spielt also keine Rolle, dass
./programs
es sich um einen Geschwisterordner handelt./foo
. Es ist die Tatsache, dassmy_python_program.py
es als Skript wie folgt ausgeführt wird:quelle
Wenn Sie dieses Problem haben, wenn Sie eine installierte Version verwenden
setup.py
, stellen Sie bei der Verwendung sicher, dass Ihr Modul darin enthalten istpackages
quelle