因此,我的结构是:

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使我失败。

最佳答案

不需要在projectpackage/__init__.py中进行绝对导入,请执行相对操作

import somemodule as module_shortname

您执行此操作的方式(使用绝对导入)将导致循环导入,这在Python中效果不佳。导入模块时,您还要调用父模块的__init__.py。在您的情况下,通过绝对导入,您还需要在projectpackage/__init__.py中调用projectpackage/__init__.py

关于python - 软件包在Python中的导入问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5796625/

10-13 09:06