Umgang mit relativen Importen in Nicht-Paket-Kontexten
Beim Versuch, ein Modul über einen relativen Pfad in einer Verzeichnisstruktur außerhalb von Python zu importieren Paket, wie zum Beispiel:
pkg/ __init__.py components/ core.py __init__.py tests/ core_test.py __init__.py
Sie können auf das stoßen Fehler:
ValueError: Attempted relative import in non-package
Den Python-Importmechanismus verstehen
Der Python-Importmechanismus basiert auf dem Attribut name der aktuellen Datei, um zu bestimmen, welche entsprechendes Modul zum Importieren. Wenn eine Datei direkt ausgeführt wird, wird ihr der Name „__main__“ zugewiesen, wodurch relative Importe unmöglich werden.
Mögliche Lösungen
Um dieses Problem zu beheben Problem, können Sie eine der folgenden Methoden verwenden:
1. Verwenden der Option -m
Sie können die Datei mit der Option -m ausführen, die die Datei als Modul zu sys.path hinzufügt:
python -m pkg.tests.core_test
2 . Angeben des Attributs Paket
Wenn Sie einen Teil Ihres Pakets speziell für die Ausführung als Skript entwickelt haben, können Sie das Attribut Paket zuweisen, um es anzugeben Wunschname im Paket angeben Hierarchie.
import sys if __name__ == "__main__": sys.__package__ = "pkg.tests" from ..components.core import GameLoopEvents
Referenz:
Weitere Informationen finden Sie in PEP 366: https://www.python.org/dev/peps/pep -0366/
Das obige ist der detaillierte Inhalt vonWie gehe ich mit relativen Importen außerhalb von Python-Paketen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!