Python 模組搜尋路徑介紹,模組搜尋路徑中的目錄有哪些
訂閱 480
本節所講述的 Python 模組搜尋路徑,同樣適用於套件,因為套件是特殊的模組。
Python 模組搜尋路徑
Python 模組搜尋路徑(Module Search Path)用於搜尋需要載入的模組,在 Python 啟動後,他與sys模組的path變數是等同的。
模組搜尋路徑並非單一的路徑,這一點和環境變數PATH類似,他可以指向多個包含模組的資料夾,或zip壓縮檔案。此外,搜尋路徑可以包含絕對路徑或相對路徑,比如,''是一個表示目前目錄的相對路徑。
如何檢視模組搜尋路徑?
在互動模式中,輸入並執行import sys和sys.path兩行程式碼,即可檢視sys.path表示的模組搜尋路徑。如果是py檔案,則可將sys.path取代為print(sys.path)。
import sys
sys.path
['', '…\\python312.zip', '…', '…\\Lib', '…\\Lib\\site-packages']import sys
sys.path
['', '/usr/lib64/python312.zip', '/usr/lib64/python3.12', '/usr/lib64/python3.12/lib-dynload', '/usr/lib64/python3.12/site-packages', '/usr/lib/python3.12/site-packages']# 顯示 sys.path 表示的 Python 搜尋路徑
import sys
print(sys.path)模組搜尋路徑的優先順序
在sys模組中,儲存模組搜尋路徑的變數path是一個串列物件,其第一個元素表示的路徑,首先被用於模組的搜尋,如果模組不存在則使用下一個元素,直至模組被找到或抵達串列末尾。
Python 模組搜尋路徑中的目錄
模組搜尋路徑一般包含以下幾種類別的目錄,被執行目標所在的目錄或目前工作目錄,環境變數包含的目錄,標準/擴充程式庫目錄,第三方套件目錄,pth檔案中的目錄,以及 Windows 登錄檔中的目錄。
Python 腳本目錄或目前目錄
當你使用 Python 執行腳本檔案時,模組搜尋路徑的第一項是腳本檔案所在的目錄。當執行包含__main__.py的資料夾或zip檔案時,模組搜尋路徑的第一項為資料夾或zip檔案所在的目錄。
如果未指定執行目標,那麽模組搜尋路徑的第一項為目前工作目錄,該目錄可能表述為相對路徑''。當你在命令列輸入python或python3進入 Python 互動模式,或使用-c選項執行程式碼,-m選項執行模組時,搜尋路徑的第一項等價於命令列的目前目錄。
腳本檔案run.py顯示了搜尋路徑的第一個元素,在使用命令列執行該檔案後,我們將看到run.py所在的目錄。
# 顯示 sys.path 的第一個元素,他是該腳本檔案所在的目錄
import sys
print(f'腳本位於:{sys.path[0]}')腳本位於:…\import_system腳本位於:…/import_system壓縮檔案run.zip包含腳本檔案__main__.py,將run.zip作為執行目標,結果顯示腳本檔案位於zip檔案中。
# 顯示 sys.path 的第一個元素,他是 __main__.py 所在 zip 檔案的路徑
import sys
print(f'__main__.py 位於:{sys.path[0]}')__main__.py 位於:…\import_system\zip\run.zip__main__.py 位於:…/import_system/zip/run.zip在命令列中使用-c選項執行 Python 程式碼,顯示模組搜尋路徑的第一項。
python -c "import sys;print(f'path[0] = [{sys.path[0]}]')"
path[0] = []python3 -c "import sys;print(f'path[0] = [{sys.path[0]}]')"
path[0] = []環境變數 PYTHONPATH 中的目錄
當你在作業系統中設定了環境變數PYTHONPATH後,該變數所包含的一系列目錄或zip檔案路徑,將被新增至模組搜尋路徑。
Python 標準/擴充程式庫目錄
Python 自身擁有一個標準程式庫,其中含有大量功能各異的標準模組,模組搜尋路徑需要包含該標準程式庫的目錄,以及標準程式庫zip檔案的路徑。Python 擴充程式庫提供標準程式庫可能相依的 API 支援,如果需要,擴充程式庫的目錄也會包含在模組搜尋路徑中。
標準/擴充程式庫在各作業系統中的位置
在 Windows 中,Python 標準程式庫一般位於安裝目錄的Lib資料夾,標準程式庫zip檔案位於安裝目錄本身,擴充程式庫位於安裝目錄的DLLs資料夾。
在 UNIX/Linux/macOS 中,標準程式庫可能位於lib/python<X>.<Y>,標準程式庫zip檔案位於lib,擴充程式庫位於lib/python<X>.<Y>/lib-dynload。這裏的lib一般是指/usr/lib,或同一位置的lib64,X為 Python 主要版本號碼,Y為次要版本號碼。
如何檢視標準/擴充程式庫的位置?
當不能確定標準/擴充程式庫的位置時,可以在互動模式中輸入import sys,sys.prefix,sys.exec_prefix幾行程式碼,來顯示其相關資訊。其中sys.prefix對應了標準程式庫目錄,sys.exec_prefix對應了擴充程式庫目錄。
如果是py檔案,則可以使用print函式在終端機顯示他們。
import sys
sys.prefix
'…'
sys.exec_prefix
'…'import sys
sys.prefix
'/usr'
sys.exec_prefix
'/usr'# 顯示標準/擴充程式庫目錄
import sys
print(sys.prefix)
print(sys.exec_prefix)Python 第三方套件目錄
模組搜尋路徑還將包括第三方套件的目錄,一般情況下,他指向一個名為site-packages的資料夾,其中包含自行組建或安裝的套件。
第三方套件
要了解第三方套件的具體位置,你可以檢視Python 第三方套件的位置一段。
pth 檔案中的目錄
如果第三方套件資料夾包含任何的pth檔案,則這些檔案中按行列出的目錄或zip檔案路徑,也將成為模組搜尋路徑的一部分。
Windows 登錄檔中的目錄
在 Windows 系統中,登錄檔機碼HKEY_CURRENT_USER\Software\Python\PythonCore\<X>.<Y>\PythonPath,HKEY_LOCAL_MACHINE\Software\Python\PythonCore\<X>.<Y>\PythonPath的預設機碼值所包含的目錄或zip檔案路徑,將被新增至模組搜尋路徑。上述中的X為 Python 主要版本號碼,Y為次要版本號碼。
內容分類
原始碼
src/zh-hant/import_system·codebeatme/python-reference·GitHub
講解影片
Python 找不到模組?分析解決模組匯入錯誤「ModuleNotFoundError No module named」·YouTube