如何使用 _pth 檔案覆寫 Python 模組搜尋路徑
訂閱 480
_pth 檔案
_pth檔案和放置於 Python 第三方套件的pth檔案類似,可以用來設定模組搜尋路徑,檔案中的每一行,可對應一條采用絕對路徑或相對路徑的目錄資訊。
設定搜尋路徑
如果你想了解一些pth檔案的基本用法,可以檢視使用 pth 檔案設定 Python 模組搜尋路徑一段。
_pth 檔案將覆寫 Python 模組搜尋路徑
與pth檔案不同,_pth檔案將覆寫整個模組搜尋路徑,如果你建立了_pth檔案,卻沒有在檔案中指定任何目錄,那麽 Python 可能無法正常啟動,因為缺少有效的搜尋路徑,會使 Python 無法找到執行所需的模組。
要讓 Python 正確執行,至少應在_pth檔案中指定標準程式庫和擴充程式庫的目錄。
_pth 檔案中列出的目錄不需要真實存在
與pth檔案不同,當_pth檔案包含不存在的目錄時,他們依然會被新增至模組搜尋路徑。
模組搜尋路徑
要了解 Python 標準/擴充程式庫的位置,你可以檢視Python 標準/擴充程式庫目錄一段。
這裏是一個可能適用於 Windows 的_pth檔案,他指出了標準程式庫zip檔案的路徑,以及標準/擴充程式庫的目錄。
# 標準程式庫 zip 檔案路徑
python312.zip
# 標準/擴充程式庫目錄
.
# …在 _pth 檔案中新增 Python 第三方套件目錄
在編寫程式碼方面,_pth檔案受到了更多的約束,僅限於使用import site,該陳述式的效果是將第三方套件目錄新增至模組搜尋路徑,並使得這些目錄中pth檔案可以被正常處理。
當然,以上對於第三方套件目錄和pth檔案的操作,是 Python 常規啟動流程的一部分(當_pth檔案不存在時)。
在 _pth 檔案中手動指定第三方套件目錄和使用 import site 之間的區別
雖然,你可以在_pth檔案中手動指定第三方套件目錄,但那會使pth檔案失效,只有匯入site模組後,pth檔案才能被識別。
# …
# 新增第三方套件目錄,並使目錄中的 pth 檔案可以被正常處理
import site_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._pth或python312._pth。
在 UNIX/Linux/macOS 中為多個 Python 可執行檔案建立 _pth 檔案
如果是 UNIX/Linux/macOS,則 Python 的可執行檔案可能有多個。假設bin目錄中同時存在python3和python3.12,那麽你可以在該目錄新增兩個_pth檔案,python3._pth和python3.12._pth,他們將分別對應在命令列輸入python3和python3.12的情況。
_pth 檔案中的相對路徑
_pth檔案中的相對路徑,是相對於_pth檔案所在的目錄,而非 Python 的目前工作目錄。在被新增至sys.path時,他們會轉換為等價的絕對路徑。