Relativer Import über das Paket der obersten Ebene hinaus
Beim Versuch relativer Importe innerhalb eines mehrstufigen Python-Pakets das Modul aus dem Paketverzeichnis ausführen kann zum Fehler „ValueError: versuchter relativer Import über das Paket der obersten Ebene hinaus“ führen. Für eine effektive Paketverwaltung ist es von entscheidender Bedeutung, den Grund für diesen Fehler zu verstehen.
Der Fehler tritt auf, weil Python keine Aufzeichnungen darüber führt, woher Pakete geladen werden. Das Ausführen eines Moduls als „python -m test_A.test“ informiert Python im Wesentlichen darüber, dass sich test_A.test nicht in einem Paket befindet (obwohl es sich in Paket/test_A befindet). Folglich wird der Versuch „from ..A import foo“ ungültig, da Python nicht weiß, dass test_A Teil eines größeren Pakets ist.
Im Gegensatz dazu behält die Verwendung von „python -m package.test_A.test“ die hierarchische Struktur bei und ermöglicht die erfolgreiche Auflösung von „from ..A import foo“. Es spiegelt genau die Tatsache wider, dass test_A ein untergeordnetes Verzeichnis innerhalb des geladenen Pakets „Paket“ ist.
Der zugrunde liegende Grund, warum Python das aktuelle Arbeitsverzeichnis nicht als Paket betrachtet, ist unbekannt. Diese Einschränkung kann jedoch gemildert werden, indem Verzeichnisse mithilfe der Datei „__init__.py“ explizit als Pakete deklariert werden und beim Importieren von Modulen der Paketsuchmechanismus von Python eingehalten wird.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3