2012-10-04 43 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