Sie müssen Ihr test
Verzeichnis ein Paket machen - fügen Sie __init__.py
Datei zum test
Verzeichnis hinzu. Danach brauchen Sie Ihre test_myproj.py
Datei, um eine __name__
von myproj.test.test_myproj
zu haben, wenn es ausgeführt wird, damit es den relativen Importpfad zu myproj
berechnen konnte. Dies führt dazu, dass from .. import myproj
als from myproj import myproj
interpretiert wird. Aber wenn Sie Ihre Testdatei direkt ausführen, wird __name__
auf __main__
festgelegt, so dass der relative Import nicht berechnet werden kann. Um dies zu beheben, sollte die Testdatei importiert werden, anstatt direkt ausgeführt zu werden. Erstellen Sie eine separate Datei (z. B. testrunner.py
), die Sie ausführen, um Tests durchzuführen, und importieren Sie in dieser Datei Ihre Testmodule (z. B. test_myproj.py) offensichtlich ohne relative Importsyntax, oder das Problem wird wiederholt. Der Import führt dazu, dass Ihre Testdatei mit dem Wert __name__
ausgeführt wird, sodass der relative Import berechnet werden kann. Z.B .:
hinzufügen testrunner.py
wie gezeigt:
testrunner.py
myproj\
__init__.py
myproj.py
test\
__init__.py
test_myproj.py
testrunner.py
Inhalt:
from myproj.test import test_myproj.py
führen Sie den Test durch:
python C:\Projects\testrunner.py
oder
cd C:\Projects\
python testrunner.py
Auf diese Weise ist es wahrscheinlich am besten, ein anderes Verzeichnis hinzuzufügen, das sowohl testrunner.py
als auch Ihr myproj
Paket enthält.
Weitere ausführliche Erläuterungen zum relativen Import in the answer here.
Es gibt eine Notiz in official docs für diese Angelegenheit:
Hinweis, dass die relative Einfuhren auf den Namen des aktuellen Moduls basieren. Da der Name des Hauptmoduls immer "__main__" lautet, müssen Module, die als Hauptmodul einer Python-Anwendung verwendet werden sollen, immer absolute Importe verwenden.
Mai verwandte Frage hat eine Antwort für Sie? http://StackOverflow.com/Questions/16981921/relative-imports-in-python-3 – jamesc