Ich spielte die Python-Import-System, um besser zu verstehen, wie es funktioniert, und ich stieß auf ein anderes Problem. Ich habe die folgende StrukturValueError: versucht relativen Import über Top-Level-Paket
pkg/
__init__.py
c.py
d.py
subpkg/
__init__.py
a.py
b.py
Innen a.py
Ich habe den folgenden Code:
from . import b
from .. import d
Und innerhalb c.py
Ich habe folgendes:
import subpkg.a
Jetzt erhalte ich die folgende Fehlermeldung:
ValueError: attempted relative import beyond top-level package
Aber warum? Wie kann ich es lösen? Ich laufe c.py
von der IDLE, und pkg
sollte als ein Paket betrachtet werden, da es die __init__.py
Datei hat.
Der erste Import funktioniert gut, aber es ist die folgende, die nicht funktioniert:
from .. import d
Weil ich etwas von einem übergeordneten Paket zu importieren versucht bin, aber ich kann es offenbar nicht, aus irgendeinem seltsamen Grund.
Wenn ich 'von .subpkg Import a' I erhalten:' Systemerror: Parent-Modul '' nicht geladen wird, kann relativ import' vom IDLE und vom Terminal nicht durchführen .. – nbro
@nbro das liegt daran, dass Sie in IDLE sind, aber wenn Sie es in einem Modul ausführen, sollte der Import so sein. IDLE ist eine schreckliche IDE und schlecht für die Python-Entwicklung im Allgemeinen. Die am besten für IDLE- und Inside-Module geeignete Option ist die Verwendung des vollständigen Paketnamens: 'from pkg import subpkg.a' nach dem Hinzufügen des Verzeichnisses für' pkg' in 'sys.path' – JBernardo
Was meinst du mit:" Wenn du führe es in einem Modul "? Ich sagte, ich laufe die Datei 'c.py' (als Haupt) sowohl vom Terminal als auch vom IDLE, wie du es vorgeschlagen hast, und es gibt mir den Fehler, den ich oben erwähne. IDLE ist eine schreckliche IDE, aber es kommt mit Python? Was wäre der Zweck, eine schreckliche IDE zu tragen? Man kann sagen, dass IDLE eine simple IDE ist, die sicher nicht zu den Besten gehört, aber theoretisch sollte sie mit Python gut funktionieren, sonst macht nichts Sinn. – nbro