簡體   English   中英

Python路徑說明:從子包導入

[英]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運行

  1. 當您從src啟動解釋器時, ''位於sys.path ,因此可以找到src路徑;
  2. 當運行python package/test/test.pysrc''是從缺失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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM