我有一个简单的目录结构,如:
MyProject
--main.py
--lib #that's a directory/package
----__init__.py
----view.py
----common_lib.py
----other irrelevant modules...
在main.py中:
from lib import view
导致以下错误:
ImportError: cannot import name view
如果相反,我会这样写:
from lib.view import *
此导入成功传递,但下一次失败发生在view.py中,其中:
from common_lib import Comments, Locations, ScreenData, ProgressSignal
导致:
ImportError: No module named 'common_lib'
从目录结构看,common_lib.py与view.py位于同一目录中,怎么会发现它无法找到?
如何从'x import y'起作用,'from x.y import *'有效吗?
'__init__.py
'完全是空的BTW。我正在使用Python 3.3 32位。
更令人讨厌的是,这个程序在2天前工作。我正在测试IDLE中的一些代码,当我认为代码已准备好包含在项目中时,将其粘贴到PyDev中,我对此错误感到震惊。我没有改变我的目录或模块。
另外,更奇怪的是,将view.py和common_lib.py作为独立运行(未导入)运行正常。如果确实存在任何问题,它应该产生错误。
感谢。任何建议都非常感谢。
答案 0 :(得分:2)
由于main.py
仍处于最高级别,您需要使用lib.common_lib
:
from lib.common_lib import Comments, Locations, ScreenData, ProgressSignal
因为上一行from lib import view
没有开始从lib
内部查找模块。
答案 1 :(得分:2)
假设:
+--main.py # from lib import view
+--lib
+--__init__.py
+--common_lib.py # Comments, etc.
+--view.py # from .common_lib import Comments, etc.
这有效:
from lib import view
这可以从view.py
开始,relative import表示common_lib
在同一个包中。
from .common_lib import Comments, Locations, ScreenData, ProgressSignal
答案 2 :(得分:0)
适合我:
danielallan@MacBook:~$mkdir myproject
danielallan@MacBook:~$cd myproject/
danielallan@MacBook:myproject$mkdir lib
danielallan@MacBook:myproject$cd lib
danielallan@MacBook:lib$touch __init__.py
danielallan@MacBook:lib$touch view.py
danielallan@MacBook:lib$touch common_lib.py
danielallan@MacBook:lib$cd ..
In [1]: from lib import view
In [2]: view
Out[2]: <module 'lib.view' from 'lib/view.pyc'>
在机器上尝试时会发生什么?您是否坐在错误的目录中,或者您的路径未配置为查找这些文件?