我的结构是:
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)时,我在AttributeError: 'module' object has no attribute 'projectpackage'
行上得到import companynamespace.projectpackage.somemodule as module_shortname
。如果我删除了as module_shortname
部分(并在文件的其余部分中进行了所有必要的替换),则所有内容都会正确导入。
谁能告诉我为什么会这样?我的Google-Fu让我失望。
答案 0 :(得分:5)
projectpackage/__init__.py
不需要绝对导入,不需要相对一个
import somemodule as module_shortname
你这样做(使用绝对导入)会导致循环导入,这在Python中不能很好地工作。当您导入模块时,您还要调用父模块的__init__.py
。在您的情况下,使用绝对导入时,您还会在projectpackage/__init__.py
中调用projectpackage/__init__.py
。
答案 1 :(得分:1)
嗯,根据PEP 221您的代码似乎是合法的。这可能是一个错误。以下解决方法(相当于该表达式)适用于我(Python 2.6.6):
from companynamespace.projectpackage import somemodule as module_shortname
希望它有所帮助。