包导入Python中的困境

时间:2011-04-26 21:22:00

标签: python import package

我的结构是:

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让我失望。

2 个答案:

答案 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

希望它有所帮助。