Python无法导入名称<class>

Min*_*Ant 9 python import module kivy

试图解决导入错误的大部分时间我一直在摔跤.

这是一个常见问题,但之前的问题没有完全解决我的问题.

我正在使用PyDev(一个Eclipse插件)和库Kivy(一个Python库)

我有一个像这样设置的文件结构:

<code>
    __init__.py
    main.py
    engine.py
    main_menu_widget.py
Run Code Online (Sandbox Code Playgroud)

"代码"保存在eclipse文件夹"MyProject"中,但它不是包,所以我没有包含它.

文件看起来像这样:

main.py

# main.py
from code.engine import Engine

class MotionApp(App):
    # Ommited
Run Code Online (Sandbox Code Playgroud)

engine.py

# engine.py
from code.main_menu_widget import MainMenuWidget

class Engine():
    # Ommited
Run Code Online (Sandbox Code Playgroud)

main_menu_widget.py

# main_menu_widget.py
from code.engine import Engine

class MainMenuWidget(Screen):
    pass
Run Code Online (Sandbox Code Playgroud)

我收到的错误详细信息是:

 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
Run Code Online (Sandbox Code Playgroud)

知道我在这里做错了吗?我刚刚重命名了我的整个文件夹结构,因为我搞砸了这个模块结构这么糟糕,但我觉得我接近它应该看起来......

Gau*_*mar 10

似乎有一个循环导入.从engine.py您导入main_menu_widget时,main_menu_widget您正在导入engine.

这显然是一个循环导入,python不允许.


Bri*_*ley 5

它位于同一文件夹中,使用相对包名称(无论如何这是一个很好的做法):

from .engine import Engine
Run Code Online (Sandbox Code Playgroud)

  • 哦,呃 - 你有一个循环依赖,main_menu_widget.py取决于engine.py和vica verca (9认同)