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