Heim >Backend-Entwicklung >Python-Tutorial >Wie implementiert man relative Importe zuverlässig in Python?

Wie implementiert man relative Importe zuverlässig in Python?

Susan Sarandon
Susan SarandonOriginal
2024-12-25 00:16:10395Durchsuche

How to Reliably Implement Relative Imports in Python?

Relative Importe in Python implementieren

Beim Arbeiten mit einer hierarchischen Verzeichnisstruktur in Python ist es notwendig, Module aus anderen Unterverzeichnissen zu importieren. Herkömmliche relative Importe mit „..“ können in bestimmten Szenarien zu Fehlern führen. Insbesondere wenn ein Modul als Hauptmodul ausgeführt wird, indem es als Argument an den Interpreter übergeben wird, schlagen relative Importe fehl.

Gemäß PEP 328 basieren relative Importe auf dem Attribut name eines Moduls Bestimmen Sie seine Position in der Pakethierarchie. Wenn jedoch der name auf „__main__“ gesetzt ist, wie es beim Ausführen eines Moduls als Hauptmodul der Fall ist, werden relative Importe unabhängig von seiner Datei so aufgelöst, als wäre das Modul ein Modul der obersten Ebene Systemstandort.

Um dieses Problem zu beheben, führte Python 2.6 die Möglichkeit ein, Module relativ zum Hauptmodul zu referenzieren. Dies wird in PEP 366 beschrieben. Durch die Nutzung dieser Funktion ist es möglich, relative Importe durchzuführen, ohne dass der Fehler „Versuchter relativer Import in Nicht-Paket“ auftritt.

Beispiel:

In einer Verzeichnisstruktur wie:

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py

Um mod2 aus mod1 zu importieren, können Sie Folgendes verwenden Syntax:

from importlib.machinery import SourceFileLoader

mod2 = SourceFileLoader('mod2', 'sub2/mod2.py').load_module()

Alternativ funktioniert die übliche relative Importsyntax, wenn Sie das Modul nicht als Hauptmodul ausführen:

from ..sub2 import mod2

Das obige ist der detaillierte Inhalt vonWie implementiert man relative Importe zuverlässig in Python?. 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