Python中的包导入困境

2024-09-28 20:41:54 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我的结构是:

companynamespace/
  __init__.py
  projectpackage/
    __init__.py
    somemodule.py

companynamespace/__init__.py为空

projectpackage/__init__.py有一行:

^{pr2}$

当我打开一个python控制台并输入import companynamespace.projectpackage(PYTHONPATH为此设置正确)时,我在import companynamespace.projectpackage.somemodule as module_shortname行得到AttributeError: 'module' object has no attribute 'projectpackage'。如果我删除as module_shortname部分(并在文件的其余部分进行所有必要的替换),则所有内容都将正确导入。在

谁能告诉我这是为什么吗?我的googlefu让我失望了。在


Tags: pyimportobjectinitas结构attributeerrorhas
2条回答

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

import somemodule as module_shortname

这样做(使用绝对导入)会导致循环导入,这在Python中不太好用。导入模块时,还调用父模块的__init__.py。在您的例子中,对于绝对导入,您也在projectpackage/__init__.py中调用projectpackage/__init__.py。在

好吧,根据PEP 221你的代码似乎是合法的。可能是个虫子。下面的解决方法(相当于该表达式)适用于我(Python2.6.6):

from companynamespace.projectpackage import somemodule as module_shortname

希望有帮助。在

相关问题 更多 >