2012-10-04 222 views
0

我创建了一个包,为了方便使用我称之为packageA。ImportError:无法导入模块 - 只有一个模块无法从包中导入

在这个包中我在(独立文件)4子模块和一个初始化文件,所以包包含以下文件:

  • __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 

而接下来进口导致导入错误:

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 

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

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

+1

如果你在里面,包,你需要做的'进口packageB' – Surya

+0

你可以把其中进口完成和正确的顺序完全追溯。 –

+0

导入packageA后,是否可以使用moduleA使用packageA.moduleA –

回答

2

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

import packageA 
print packageA.__file__ 

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

print packageA.__path__ 
+0

这就提出了一个错误: 回溯(最近通话最后一个): 文件 “run.py” 18行,在 打印(程序包A .__ path__) AttributeError的: '模块' 对象有没有属性 '__path__' 但通过packageA.moduleB访问moduleB工作正常 – akohout

+0

@raveN尝试编辑答案。听起来packageA不是一个软件包,而是一个导入moduleB的模块。 –

+1

是的,你是对的。它没有导入我的包,它导入了一个不同的包。 '__file__'指向我的软件包的一个已经安装的版本,但它是一个没有缺少模块的前一个版本:/非常感谢! – akohout