Python 奇怪的导入行为 : import x. y 有效,from x import y 无效

标签 python importerror

我有一个简单的目录结构,就像这样:

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在同一个目录下,怎么会找不到呢? 为什么“from x import y”不起作用,而“from x.y import *”起作用? '__init__.py' 完全是空的顺便说一句。我正在使用 Python 3.3 32 位。

更烦人的是,同样的程序在 2 天前运行。我正在 IDLE 中测试一些代码,当我认为代码已准备好包含在项目中时,将其粘贴到 PyDev 中,我被这个错误震惊了。我对我的目录或模块没有任何更改。

此外,更奇怪的是,单独运行 view.py 和 common_lib.py(不导入)运行得很好。如果确实存在任何问题,它应该会产生错误。

谢谢。非常感谢任何建议。

最佳答案

由于main.py还在顶层,所以需要使用lib.common_lib:

from lib.common_lib import Comments, Locations, ScreenData, ProgressSignal

因为上一行 from lib import view 没有开始从 lib 内部寻找模块。

关于Python 奇怪的导入行为 : import x. y 有效,from x import y 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17139113/

相关文章:

Python:如果列表元素的第一项发生变化,如何交替选择?

python - 为 OSX 制作可以接受参数的 Python 卡住二进制文件的正确方法是什么?

python - 在 Python 中编写 ElementTree 时如何保留 ASCII 十六进制代码点?

django - 如何在 django 1.6 中满足 django.contrib.markup.templatetags.markup import restructuredtext?

python 3.5 在 statsmodels ImportError : cannot import name '_representation'

python - 导入错误 : No module named testrunner

python - matplotlib 无法使用 usetex = True 输出 EPS 图

python - 签名中带有 TypeVar 的协议(protocol)的实现者不能使用自己的类型

python - 尝试导入嵌套模块时 Python 中出现 ModuleNotFound 错误

qt - 无法访问驻留在同一目录中的 QML 单例