我创建了一个包,为了便于使用,我称之为packageA。
在这个包中,我有4个子模块(单独的文件)和一个init文件,所以包中包含以下文件:
__init__.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正常工作,没有任何错误。
答案 0 :(得分:2)
也许您正在从其他位置导入不同版本的软件包。在您的脚本中尝试这一点以确保它是正确的 - 它应该打印__init__.py
文件的完整路径。
import packageA
print packageA.__file__
另外,检查包的模块搜索路径是否已更改。通常这是一个包含一个元素的列表,即包的目录路径:
print packageA.__path__