ImportError:无法导入模块 - 只能从包中导入一个模块

时间:2012-10-04 17:01:45

标签: python

我创建了一个包,为了便于使用,我称之为packageA。

在这个包中,我有4个子模块(单独的文件)和一个init文件,所以包中包含以下文件:

  • __init__.py
  • moduleA.py
  • moduleB.py
  • moduleC.py
  • moduleD.py

模块B-D独立,它们不导入任何其他本地模块。模块A导入模块B-D。

现在我有一个想要导入packageA的脚本,到目前为止,init.py是空的。

import packageA

没有问题。但是此导入不提供moduleA。如果我想通过packageA.moduleA使用它,则会引发此错误:

AttributeError: 'module' object has no attribute

以下也可以顺利运行:

from packageA import moduleB
from packageA import moduleC
from packageA import moduleD

下一次导入会导致ImportError:

from packageA import moduleA

引发此错误:

Traceback (most recent call last):
File "run.py", line 19, in <module>
from packageA import moduleA
ImportError: cannot import name moduleA

我想也许我在moduleA中做错了,但即使moduleA为空,导入也会引发同样的错误。似乎这个模块不能以某种方式导入。这怎么可能?

我有所有python模块的separete单元测试文件,是的,moduleA正常工作,没有任何错误。

1 个答案:

答案 0 :(得分:2)

也许您正在从其他位置导入不同版本的软件包。在您的脚本中尝试这一点以确保它是正确的 - 它应该打印__init__.py文件的完整路径。

import packageA
print packageA.__file__

另外,检查包的模块搜索路径是否已更改。通常这是一个包含一个元素的列表,即包的目录路径:

print packageA.__path__