Python 模組搜尋路徑介紹,Python 模組搜尋路徑中的目錄有哪些
本節所講述的 Python 模組搜尋路徑,同樣適用於套件,因為套件是特殊的模組。
Python 模組搜尋路徑
Python 模組搜尋路徑(Module Search Path)用於搜尋需要載入的 Python 模組,在 Python 啟動後,他與sys
模組的path
變數是等同的。
模組搜尋路徑並非單一的路徑,這一點和環境變數PATH
類似,他可以指向多個包含 Python 模組的資料夾,或zip
壓縮檔案。此外,搜尋路徑可以包含絕對路徑或相對路徑,比如,''
是一個表示目前目錄的相對路徑。
如何檢視 Python 模組搜尋路徑?
在 Python 的互動模式中,輸入並執行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)
Python 模組搜尋路徑的優先順序
在sys
模組中,儲存 Python 模組搜尋路徑的變數path
是一個串列物件,其第一個元素表示的路徑,首先被用於模組的搜尋,如果模組不存在則使用下一個元素,直至模組被找到或抵達串列末尾。
Python 模組搜尋路徑中的目錄
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 標準/擴充程式庫目錄
Python 自身擁有一個標準程式庫,其中含有大量功能各異的標準模組,模組搜尋路徑需要包含該標準程式庫的目錄,以及標準程式庫zip
檔案的路徑。Python 擴充程式庫提供標準程式庫可能依賴的 API 支援,如果需要,擴充程式庫的目錄也會包含在模組搜尋路徑中。
Python 標準/擴充程式庫在各作業系統中的位置
在 Windows 中,Python 標準程式庫一般位於安裝目錄的Lib
資料夾,標準程式庫zip
檔案位於安裝目錄本身,擴充程式庫位於安裝目錄的DLLs
資料夾。
在 UNIX/Linux/macOS 中,Python 標準程式庫可能位於lib/python<X>.<Y>
,標準程式庫zip
檔案位於lib
,擴充程式庫位於lib/python<X>.<Y>/lib-dynload
。這裏的lib
一般是指/usr/lib
,或同一位置的lib64
,X
為 Python 主要版本號碼,Y
為次要版本號碼。
如何檢視 Python 標準/擴充程式庫的位置?
當不能確定標準/擴充程式庫的位置時,可以在 Python 的互動模式中,輸入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 第三方套件目錄
Python 模組搜尋路徑還將包括第三方套件的目錄,一般情況下,他指向一個名為site-packages
的資料夾,其中包含自行組建或安裝的 Python 套件。
第三方套件
要了解第三方套件的具體位置,你可以檢視Python 第三方套件的位置一段。
Python pth 檔案中的目錄
如果第三方套件資料夾包含任何的pth
檔案,則這些檔案中按行列出的目錄或zip
檔案路徑,也將成為 Python 模組搜尋路徑的一部分。
Windows 登錄檔中的目錄
在 Windows 系統中,登錄檔機碼HKEY_CURRENT_USER\Software\Python\PythonCore\<X>.<Y>\PythonPath
,HKEY_LOCAL_MACHINE\Software\Python\PythonCore\<X>.<Y>\PythonPath
的預設機碼值所包含的目錄或zip
檔案路徑,將被新增至模組搜尋路徑。上述中的X
為 Python 主要版本號碼,Y
為次要版本號碼。
內容分類
程式碼
print_path.py·codebeatme/python-reference·GitHub
run.py·codebeatme/python-reference·GitHub
zip/__main__.py·codebeatme/python-reference·GitHub
print_prefix.py·codebeatme/python-reference·GitHub