【发布时间】:2011-11-05 17:46:06
【问题描述】:
目录结构:
[app]
start.py
import package1
[package1]
__init__.py
print('Init package1')
import module1
import subpackage1
module1.py
print('package1.module1')
import package1 # this works OK
[subpackage1]
__init__.py
print('Init package1.subpackage1')
import module1
module1.py
print('Init package1.subpackage1.module1')
#from package1 import subpackage1 # ImportError: cannot import name subpackage1
#from .. import subpackage1 # ImportError: cannot import name subpackage1
#import . as subpackage1 # SyntaxError: invalid syntax
import package1.subpackage1 as subpackage1 # AttributeError: 'module' object has no attribute 'subpackage1'
为了避免subpackage1.module1 中的循环导入引起的问题,我想导入模块subpackage1,以便以subpackage.module2 的形式引用subpackage1 中的其他模块。因为如果我这样做from . import module2,当我尝试此导入时,module2 中的引用可能还不存在于subpackage1。
我已经尝试了 4 种不同的方法 - 它们都不起作用 - 请参阅代码中的 cmets。
有什么帮助吗?
前段时间subpackage1 是顶级包并且它工作了(看看它在package1.module1 的源代码中是如何工作的。现在,当我将它向下移动一级时 - 我遇到了这个问题......我知道我可以将package1 dir添加到sys.path,但这很难看。
【问题讨论】:
-
你正在尝试的实际上是创建一个循环导入本身。
标签: python import python-3.x