Es ist offensichtlich, dass die zyklischen Importfehler, wenn dieses Paket importieren:Warum ist das zyklische Importproblem verschwunden?
Datei __init__.py
:
from . import modules
Datei forward.py
:
from .modules import ext_modules
def forward(dest):
if dest in ext_modules:
print("forwarding to {}".format(ext_modules[dest]))
Datei modules.py
:
from . import forward
ext_modules = {}
def main():
ext_modules['test'] = 'TEST'
forward.forward('test')
Diese Importproblem kann z.B. indem Sie die Zeilen 1 und 3 in der Datei modules.py austauschen. Bisher glaube ich zu verstehen, was vor sich geht.
Was ich wirklich nicht verstehe, ist dies. Wenn ich einen weiteren Import an die Spitze der __init__.py
Datei hinzufügen:
from . import forward
from . import modules
das Problem ist weg. Das Paket kann importiert werden und die Hauptfunktion funktioniert. Die Zyklusabhängigkeit zwischen modules
und forward
ist jedoch immer noch vorhanden. Diese Dateien bleiben unverändert. Kannst du mir bitte erklären, was dort vor sich geht? (Python-Version 3.5)
Vielen Dank für die ausführliche Erklärung. Ich habe es zufällig entdeckt. Ich bin mir nicht sicher, wie ich es nennen soll. Ein "leerer Modultrick" vielleicht? Wie auch immer, würdest du empfehlen, es als mögliche Lösung für das zyklische Abhängigkeitsproblem zu verwenden oder ist es eher ein hässlicher Hack? – VPfB
@VPfB: Es ist eine richtige Lösung für Ihr Problem. Sie könnten es verbessern, indem Sie 'from verwenden. Importiere Module in 'forward.py', dann benutze' modules.ext_modules' im 'forward (dest)' Modul; d.h. späte Bindung überall verwenden. –