[英]Python path explained: import from a subpackage
這個問題詳細說明了我無法向自己解釋的行為。
src/package/__init__.py
為空但存在。
src/package/subpackage/__init__.py
:
pink = 'It works'
src/package/test/test.py
:
import package.subpackage as subpackage
# I also tried `import package.subpackage as subpackage
print subpackage.pink
從src
調用: python package/test/test.py
只是失敗,並出現ImportError: No module named subpackage
。 請注意, import package
也不起作用。
注意:(從src
運行解釋器並鍵入import語句效果很好。
我是否應該理解我不應該調用包的子文件? 在我的項目中,這是一個測試文件,因此在這里存放對我來說聽起來很合邏輯。
為什么當前工作目錄不在導入路徑中?
非常感謝那些閱讀和回答的人。
因為您的軟件包不在$ PYTHONPATH中。 如果您要調用test.py,則可以將test.py文件移動到src /目錄,或將src添加到$ PYTHONPATH
PYTHONPATH="/path/to/src:$PYTHONPATH"
export PYTHONPATH
從文檔
導入名為spam的模塊時,解釋器首先搜索具有該名稱的內置模塊。 如果找不到,它將在變量sys.path給出的目錄列表中搜索名為spam.py的文件。
>>> import sys
>>> sys.path
輸出是這樣的
['.', '/usr/bin', ...
這意味着當前目錄也位於sys.path中。 如果要導入模塊,請通過將軟件包目錄添加到環境變量PYTHONPATH或將當前目錄或腳本目錄更改為軟件包目錄來確保模塊路徑在sys.path中。
在python package / test / test.py失敗的情況下,它也從src運行 :
src
啟動解釋器時, ''
位於sys.path
,因此可以找到src
路徑; python package/test/test.py
從src
, ''
是從缺失sys.path
,雖然os.path.abspath('.')
示出了當前目錄是"<xxx>\\\\src"
"<xxx>\\\\src"
不在sys.path
,而"<xxx>\\\\src\\\\package\\\\test"
在sys.path
。 就是說,python將文件的路徑添加到sys.path
,而不是您運行腳本的路徑。 看看文檔怎么說 :
在程序啟動時初始化后,該列表的第一項path [0]是包含用於調用Python解釋器的腳本的目錄。 如果腳本目錄不可用(例如,如果交互式調用解釋器或從標准輸入中讀取腳本),則path [0]為空字符串,該字符串將引導Python首先搜索當前目錄中的模塊。 請注意,由於PYTHONPATH的結果,在插入條目之前插入了腳本目錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.