Python 无法导入名称 <class>
我昨晚一直在为解决一个导入错误而苦恼。
这个问题很常见,但之前的问题都没有完全解决我的困扰。
我在使用PyDev(一个Eclipse的插件)和Kivy(一个Python库)。
我的文件结构是这样的:
<code>
__init__.py
main.py
engine.py
main_menu_widget.py
“code”文件夹在Eclipse的“MyProject”文件夹里,但它不是一个包,所以我没有把它包含进去。
文件看起来是这样的:
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
我收到的错误信息,详细内容是:
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
你觉得我哪里出错了?我刚把整个文件夹结构重命名,因为我把这个模块结构搞得太乱了,但我觉得我快接近正确的样子了……
3 个回答
1
你的代码目录 就是 一个包。确保它上面的目录,也就是 C:\MyProject
,根据你的错误信息来看,这个目录在你的 PYTHONPATH 中。
右键点击你的项目,打开菜单,然后选择 属性。接着选择 PyDev - PYTHONPATH,然后切换到 源文件夹 标签。检查一下上面提到的目录是否在里面;如果没有,就点击 添加源文件夹,从对话框中选择它,然后点击 确定。
5
它在同一个文件夹里,使用相对的包名(这样做其实是个好习惯):
from .engine import Engine
12
看起来你遇到了一个循环导入的问题。
在 engine.py
文件里,你在导入 main_menu_widget
,而在 main_menu_widget
文件里,你又在导入 engine
。
这就是一个明显的循环导入,Python 是不允许这样的做法的。