我的结构是这样的:在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