如何使用 _pth 檔案覆寫 Python 模組搜尋路徑
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
檔案的路徑,以及標準/擴充程式庫的目錄。
# 標準程式庫 zip 檔案路徑
python312.zip
# 標準/擴充程式庫目錄
.
# …
在 _pth 檔案中使用 import site 新增 Python 第三方套件目錄
在編寫程式碼方面,_pth
檔案受到了更多的約束,僅限於使用import site
,該陳述式的效果是將第三方套件目錄新增至模組搜尋路徑,並使得這些目錄中pth
檔案可以被正常處理。
當然,以上對於第三方套件目錄和pth
檔案的操作,是 Python 常規啟動流程的一部分(當_pth
檔案不存在時)。
在 _pth 檔案中手動指定第三方套件目錄和使用 import site 之間的區別
雖然,你可以在_pth
檔案中手動指定第三方套件目錄,但那會使pth
檔案失效,只有匯入site
模組後,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._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
的情況。
Python _pth 檔案中的相對路徑
_pth
檔案中的相對路徑,是相對於_pth
檔案所在的目錄,而非 Python 的目前工作目錄。在被新增至sys.path
時,他們會轉換為等價的絕對路徑。