Python无法导入名称<;类别>;

Python无法导入名称<;类别>;,python,import,module,kivy,Python,Import,Module,Kivy,为了解决一个导入错误,我已经绞尽脑汁了一个晚上 这是一个常见的问题,但之前的问题都不能完全回答我的问题 我正在使用PyDev(一个Eclipse插件)和库Kivy(一个Python库) 我的文件结构设置如下: <code> __init__.py main.py engine.py main_menu_widget.py “代码”保存在eclipse文件夹“MyProject”中,但它不是一个包,所以我没有包含它 这些文件如下所示: <code

为了解决一个导入错误,我已经绞尽脑汁了一个晚上

这是一个常见的问题,但之前的问题都不能完全回答我的问题

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

我的文件结构设置如下:

<code>
    __init__.py
    main.py
    engine.py
    main_menu_widget.py
“代码”保存在eclipse文件夹“MyProject”中,但它不是一个包,所以我没有包含它

这些文件如下所示:

<code>
    __init__.py
    main.py
    engine.py
    main_menu_widget.py
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
主菜单\u widget.py

# main_menu_widget.py
from code.engine import Engine

class MainMenuWidget(Screen):
    pass
我收到的详细错误是:

 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
回溯(最近一次呼叫最后一次):
文件“C:\MyProject\code\main.py”,第8行,在
从code.engine导入引擎
文件“C:\MyProject\code\engine.py”,第6行,在
从code.main\u菜单\u小部件导入MainMenuWidget
文件“C:\MyProject\code\main\u menu\u widget.py”,第3行,在
从code.engine导入引擎

知道我做错了什么吗?我刚刚重新命名了我的整个文件夹结构,因为我把这个模块结构搞砸了,但我想我已经接近它的外观了….

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

您的代码目录是一个包。从错误消息判断,确保它上面的目录,即
C:\MyProject
,位于PYTHONPATH中

通过选择项目并单击鼠标右键打开关联菜单,然后选择属性。选择PyDev-PYTHONPATH,然后从中选择SourceFolders选项卡。
检查上述目录是否存在;如果不是,请按“添加源文件夹”,从对话框中选择它,然后按“确定”。

似乎有循环导入。 从
engine.py
导入
main\u菜单小部件
,而从
main\u菜单小部件
导入
engine


这显然是python不允许的循环导入。

不是code.engine?这不是更有意义吗,因为它都在根“代码”包中?通常在从您自己的项目导入内容时使用相对导入是一个很好的做法。这很公平。我只是试了一下,没有运气,它抛出了同样的错误,同样的线条。“无法导入名称引擎”哦,是的,你有一个循环依赖,主菜单依赖于Engine.py和vica vercaYep,这是一个循环依赖。这也是一个糟糕的单身汉。谢谢,我为此发布了一个新问题,但确实找到了一种绕过的方法。但愿错误消息更具描述性!Yay Python 2可能会重复告诉您这个问题