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
Freigeben: 2024-12-12 22:24:17
Original
892 Leute haben es durchsucht

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
Nach dem Login kopieren

Sie können auf das stoßen Fehler:

ValueError: Attempted relative import in non-package
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage