Python 模組搜尋路徑介紹,Python 模組搜尋路徑中的目錄有哪些

閱讀 8:11·字數 2456·更新 
Youtube 頻道
訂閱 133

本節所講述的 Python 模組搜尋路徑,同樣適用於套件,因為套件是特殊的模組。

Python 模組搜尋路徑

Python 模組搜尋路徑(Module Search Path)用於搜尋需要載入的 Python 模組,在 Python 啟動後,他與sys模組的path變數是等同的。

模組搜尋路徑並非單一的路徑,這一點和環境變數PATH類似,他可以指向多個包含 Python 模組的資料夾,或zip壓縮檔案。此外,搜尋路徑可以包含絕對路徑或相對路徑,比如,''是一個表示目前目錄的相對路徑。

如何檢視 Python 模組搜尋路徑?

在 Python 的互動模式中,輸入並執行import syssys.path兩行程式碼,即可檢視sys.path表示的模組搜尋路徑。如果是py檔案,則可將sys.path取代為print(sys.path)

Windows
import sys
sys.path
['', '\\python312.zip', '', '\\Lib', '\\Lib\\site-packages']
UNIX/Linux/macOS
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']
print_path.py
# 顯示 sys.path 表示的 Python 搜尋路徑
import sys
print(sys.path)

Python 模組搜尋路徑的優先順序

sys模組中,儲存 Python 模組搜尋路徑的變數path是一個串列物件,其第一個元素表示的路徑,首先被用於模組的搜尋,如果模組不存在則使用下一個元素,直至模組被找到或抵達串列末尾。

Python 模組搜尋路徑中的目錄

Python 模組搜尋路徑一般包含以下幾種類別的目錄,被執行目標所在的目錄或目前工作目錄,環境變數包含的目錄,標準/擴充程式庫目錄,第三方套件目錄,pth檔案中的目錄,以及 Windows 登錄檔中的目錄。

Python 腳本目錄或目前目錄

當你使用 Python 執行腳本檔案時,模組搜尋路徑的第一項是腳本檔案所在的目錄。當執行包含__main__.py的資料夾或zip檔案時,模組搜尋路徑的第一項為資料夾或zip檔案所在的目錄。

如果未指定執行目標,那麽模組搜尋路徑的第一項為目前工作目錄,該目錄可能表述為相對路徑''。當你在命令列輸入pythonpython3進入 Python 互動模式,或使用-c選項執行程式碼,-m選項執行模組時,搜尋路徑的第一項等價於命令列的目前目錄。

腳本檔案run.py顯示了搜尋路徑的第一個元素,在使用命令列執行該檔案後,我們將看到run.py所在的目錄。

run.py
# 顯示 sys.path 的第一個元素,他是該腳本檔案所在的目錄
import sys
print(f'腳本位於:{sys.path[0]}')
Windows
腳本位於:\import_system
UNIX/Linux/macOS
腳本位於:/import_system

壓縮檔案run.zip包含腳本檔案__main__.py,將run.zip作為執行目標,結果顯示腳本檔案位於zip檔案中。

zip/__main__.py
# 顯示 sys.path 的第一個元素,他是 __main__.py 所在 zip 檔案的路徑
import sys
print(f'__main__.py 位於:{sys.path[0]}')
Windows
__main__.py 位於:\import_system\zip\run.zip
UNIX/Linux/macOS
__main__.py 位於:/import_system/zip/run.zip

在命令列中使用-c選項執行 Python 程式碼,顯示模組搜尋路徑的第一項。

Windows
python -c "import sys;print(f'path[0] = [{sys.path[0]}]')"
path[0] = []
UNIX/Linux/macOS
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,或同一位置的lib64X為 Python 主要版本號碼,Y為次要版本號碼。

如何檢視 Python 標準/擴充程式庫的位置?

當不能確定標準/擴充程式庫的位置時,可以在 Python 的互動模式中,輸入import syssys.prefixsys.exec_prefix幾行程式碼,來顯示其相關資訊。其中sys.prefix對應了標準程式庫目錄,sys.exec_prefix對應了擴充程式庫目錄。

如果是py檔案,則可以使用print函式在終端機顯示他們。

Windows
import sys
sys.prefix
''
sys.exec_prefix
''
UNIX/Linux/macOS
import sys
sys.prefix
'/usr'
sys.exec_prefix
'/usr'
print_prefix.py
# 顯示標準/擴充程式庫目錄
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>\PythonPathHKEY_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