it-swarm.com.de

Python kann den Namen <class> nicht importieren

Ich habe die meiste Nacht über gekämpft, um einen Importfehler zu beheben.

Dies ist ein allgemeines Problem, aber keine vorherige Frage beantwortet mein Problem.

Ich verwende PyDev (ein Eclipse-Plugin) und die Bibliothek Kivy (eine Python-Bibliothek).

Ich habe eine Dateistruktur wie folgt eingerichtet:

<code>
    __init__.py
    main.py
    engine.py
    main_menu_widget.py

"Code" wird im Eclipse-Ordner "MyProject" gespeichert, aber es ist kein Paket, daher habe ich es nicht hinzugefügt.

Die Dateien sehen so aus:

main.py

# main.py
from code.engine import Engine

class MotionApp(App):
    # Ommited

engine.py

# engine.py
from code.main_menu_widget import MainMenuWidget

class Engine():
    # Ommited

main_menu_widget.py

# main_menu_widget.py
from code.engine import Engine

class MainMenuWidget(Screen):
    pass

Der Fehler, den ich im Detail bekomme, lautet:

 Traceback (most recent call last):
   File "C:\MyProject\code\main.py", line 8, in <module>
     from code.engine import Engine
   File "C:\MyProject\code\engine.py", line 6, in <module>
     from code.main_menu_widget import MainMenuWidget
   File "C:\MyProject\code\main_menu_widget.py", line 3, in <module>
     from code.engine import Engine

Irgendeine Idee, was ich hier falsch gemacht habe? Ich habe gerade meine gesamte Ordnerstruktur umbenannt, weil ich diese Modulstruktur so vermasselt habe, aber ich glaube, ich bin nahe dran, wie sie aussehen sollte ....

8
MintyAnt

Es scheint einen zirkulären Import zu geben. Von engine.py importieren Sie main_menu_widget, während von main_menu_widget Sie engine importieren.

Dies ist eindeutig ein zirkulärer Import, den Python nicht zulässt.

9
Gaurav Kumar

es befindet sich im selben Ordner. Verwenden Sie einen relativen Paketnamen (dies ist auf jeden Fall empfehlenswert):

from .engine import Engine
5
Brian Dilley

Ihr Codeverzeichnis ist ein Paket. Stellen Sie sicher, dass sich das darüber liegende Verzeichnis, d. H. C:\MyProject Ihren Fehlermeldungen zufolge, in Ihrem PYTHONPATH befindet.

Öffnen Sie das Kontextmenü, indem Sie Ihr Projekt auswählen und mit der rechten Maustaste darauf klicken. Wählen Sie dann Eigenschaften aus. Wählen Sie PyDev - PYTHONPATH und dort die Source-Ordner . Überprüfen Sie, ob das oben angegebene Verzeichnis vorhanden ist. Wenn dies nicht der Fall ist, drücken Sie Quellordner hinzufügen , wählen Sie es aus dem Dialog aus und drücken SieOK.

1
Nicola Musatti