如何使用 _pth 檔案覆寫 Python 模組搜尋路徑

閱讀 4:18·字數 1293·發佈 
Youtube 頻道
訂閱 133

Python _pth 檔案

_pth檔案和放置於第三方套件的pth檔案類似,可以用來設定 Python 模組搜尋路徑,檔案中的每一行,可對應一條采用絕對路徑或相對路徑的目錄資訊。

設定搜尋路徑

如果你想了解一些pth檔案的基本用法,可以檢視使用 pth 檔案設定 Python 模組搜尋路徑一段。

_pth 檔案將覆寫 Python 模組搜尋路徑

pth檔案不同,_pth檔案將覆寫整個 Python 模組搜尋路徑,如果你建立了_pth檔案,卻沒有在檔案中指定任何目錄,那麽 Python 可能無法正常啟動,因為缺少有效的搜尋路徑,會使 Python 無法找到執行所需的模組。

要讓 Python 正確執行,至少應在_pth檔案中指定標準程式庫和擴充程式庫的目錄。

_pth 檔案中列出的目錄不需要真實存在

pth檔案不同,當_pth檔案包含不存在的目錄時,他們依然會被新增至模組搜尋路徑。

模組搜尋路徑

要了解 Python 標準/擴充程式庫的位置,你可以檢視Python 標準/擴充程式庫目錄一段。

這裏是一個可能適用於 Windows 的_pth檔案,他指出了標準程式庫zip檔案的路徑,以及標準/擴充程式庫的目錄。

python._pth
# 標準程式庫 zip 檔案路徑
python312.zip
# 標準/擴充程式庫目錄
.
# …

在 _pth 檔案中使用 import site 新增 Python 第三方套件目錄

在編寫程式碼方面,_pth檔案受到了更多的約束,僅限於使用import site,該陳述式的效果是將第三方套件目錄新增至模組搜尋路徑,並使得這些目錄中pth檔案可以被正常處理。

當然,以上對於第三方套件目錄和pth檔案的操作,是 Python 常規啟動流程的一部分(當_pth檔案不存在時)。

在 _pth 檔案中手動指定第三方套件目錄和使用 import site 之間的區別

雖然,你可以在_pth檔案中手動指定第三方套件目錄,但那會使pth檔案失效,只有匯入site模組後,pth檔案才能被識別。

python._pth
# …
# 新增第三方套件目錄,並使目錄中的 pth 檔案可以被正常處理
import site

Python _pth 檔案的名稱和位置

不像pth檔案可以隨意命名,_pth檔案的名稱需要和 Python 可執行檔案的名稱保持一致,_pth檔案存放的位置,應該位於 Python 可執行檔案所在的目錄。

在 Windows 中為 Python 標準程式庫 zip 檔案建立 _pth 檔案

在 Windows 系統中,_pth檔案的名稱還可以與標準程式庫zip檔案的名稱一致,但這樣的做法在其他作業系統中可能無效,如果你采用兩種命名方式建立了兩個_pth檔案,那麽與 Python 可執行檔案同名的_pth檔案將失效。

假設 Windows 中 Python 可執行檔案為python.exe,標準程式庫zip檔案為python312.zip,那麽_pth檔案就可以命名為python._pthpython312._pth

在 UNIX/Linux/macOS 中為多個 Python 可執行檔案建立 _pth 檔案

如果是 UNIX/Linux/macOS,則 Python 的可執行檔案可能有多個。假設bin目錄中同時存在python3python3.12,那麽你可以在該目錄新增兩個_pth檔案,python3._pthpython3.12._pth,他們將分別對應在命令列輸入python3python3.12的情況。

Python _pth 檔案中的相對路徑

_pth檔案中的相對路徑,是相對於_pth檔案所在的目錄,而非 Python 的目前工作目錄。在被新增至sys.path時,他們會轉換為等價的絕對路徑。

程式碼

python._pth·codebeatme/python-reference·GitHub