Ich kann nicht für mein ganzes Leben die relativen Importe von Python zum Laufen bringen. Ich habe ein einfaches Beispiel dafür erstellt, wo es nicht funktioniert:
Die Verzeichnisstruktur lautet:
/__init__.py
/start.py
/parent.py
/sub/__init__.py
/sub/relative.py
/start.py
enthält nur: import sub.relative
/sub/relative.py
enthält nur from .. import parent
Alle anderen Dateien sind leer.
Wenn Sie Folgendes in der Befehlszeile ausführen:
$ cd /
$ python start.py
Ich bekomme:
Traceback (most recent call last):
File "start.py", line 1, in <module>
import sub.relative
File "/home/cvondrick/sandbox/sub/relative.py", line 1, in <module>
from .. import parent
ValueError: Attempted relative import beyond toplevel package
Ich benutze Python 2.6. Warum ist das so? Wie mache ich dieses Sandbox-Beispiel?
Wenn Sie
relative.py
direkt anrufen möchten und also wirklich von einem Modul der obersten Ebene importieren möchten, müssen Sie es explizit zursys.path
Liste hinzufügen .So sollte es funktionieren:
Wenn Sie der Meinung sind, dass das oben Gesagte zu Inkonsistenzen führen kann, können Sie stattdessen Folgendes verwenden:
sys.path[0]
bezieht sich auf den Pfad, von dem aus der Einstiegspunkt ausgeführt wurde.quelle
Überprüfen Sie es in Python3:
Beispiel 1:
Wenn wir es so ausführen (nur um sicherzustellen, dass PYTHONPATH leer ist):
Ausgabe:
Wenn wir den Import in ändern
sub/relative.py
Wenn wir es so laufen lassen:
Ausgabe:
Beispiel 2:
Führen Sie es wie folgt aus:
Ausgabe:
Wenn wir den Import ändern in
sub/start.py
:Führen Sie es wie folgt aus:
Ausgabe:
Führen Sie es wie folgt aus:
Ausgabe:
Es ist auch besser, den Import aus dem Stammordner zu verwenden, dh:
Führen Sie es wie folgt aus:
Ausgabe:
quelle