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!