Heim >Backend-Entwicklung >Python-Tutorial >Wie gehe ich mit relativen Importen außerhalb von Python-Paketen um?

Wie gehe ich mit relativen Importen außerhalb von Python-Paketen um?

Linda Hamilton
Linda HamiltonOriginal
2024-12-12 22:24:17893Durchsuche

How to Handle Relative Imports Outside of Python Packages?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn