0
我在导入子包时遇到问题。包装结构我是:奇怪的Python导入行为
project/
__init__.py
defaults.py
helpers/
__init__.py
misc.py
我需要各地项目从defaults.py
使用数据,包括helpers\misc.py
,而在defaults.py
我需要使用一些功能从helpers\misc.py
。为解决循环引用我想是指一切从项目的根,即内部defaults.py
我做
import project
project.helpers.somefunction()
然而,这是行不通的。
from project.helpers import somefunction
somefunction()
但后来我有一个循环引用的问题:当我直接导入功能,这样它的工作,虽然。 我也有同样的问题在项目子包中的任何地方,但在其他地方,我可以直接导入子包并解决问题。
那么,为什么它工作,如果我从子包中导入,但不是当我从根包引用相同的子包时?
PS:没有像这样的文件与helpers\
在同一级别或在里面。
PPS:整个项目包通过sys.path.insert(0, '<project_abs_path>')
加入sys.path
PPPS:Python的2.7.3,Ubuntu的12.04
能否请您解释一下为什么这会有所帮助? – Daniel
@Ophion当你导入一个包时,**执行** __init __。py'中的代码。期。它没有**导入子包。如果你想自动导入子包,那么你必须在包的'__init __。py'中这样做。包就像任何其他模块一样。唯一的区别是它在文件系统中的布局(使用'name/__ init __。py'而不是'name.py')以及执行相对导入的能力。 – Bakuriu