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
Freigeben: 2024-12-25 00:16:10
Original
406 Leute haben es durchsucht

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

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

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

from ..sub2 import mod2
Nach dem Login kopieren

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!

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