我的結構是這樣的:在Python
companynamespace/
__init__.py
projectpackage/
__init__.py
somemodule.py
companynamespace/__init__.py
爲空
projectpackage/__init__.py
有這樣一行:
import companynamespace.projectpackage.somemodule as module_shortname
當我打開了一個Python控制檯,然後輸入import companynamespace.projectpackage
( PYTHONPATH爲此設置正確),我在import companynamespace.projectpackage.somemodule as module_shortname
行上獲得AttributeError: 'module' object has no attribute 'projectpackage'
。如果我刪除as module_shortname
部分(並在文件的其餘部分進行所有必需的替換),則所有內容均正確導入。
誰能告訴我這是爲什麼?我的Google-Fu失敗了。
診斷(即循環導入問題)是正確的,但解釋和建議的解決方案並不完全正確。當執行'projectpackage/__ init __。py'時,'companynamespace'中的'projectpackage'屬性尚未設置,因此會引發特定的錯誤。對於當前的Python,顯式相對導入('from。import somemodule')是比依賴隱式相對導入更好的選擇。 – ncoghlan 2011-04-27 05:26:26
血淋淋的細節可以在http://bugs.python.org/issue992389 – ncoghlan 2011-04-27 05:28:25
感謝mil,我想到了一個循環導入問題,但不知道Python必須解決它的功能。 – 2011-04-29 00:25:33