跳到主要內容
技術

Python Install Manager:Windows 上的 Python 環境管理新標準

深入解析 PEP 773 引入的 PyManager,從安裝、版本管理到 CI/CD 自動化,掌握 Windows 原生 Python 環境的完整操作流程。

背景:Windows Python 環境管理的演進

長期以來,Windows 開發者習慣依賴「完整安裝程式(Full Installer)」建構 Python 環境。隨著專案數量增加,手動管理多版本的問題逐漸浮現:PATH 衝突、環境污染、卸載困難,幾乎是每個 Windows Python 開發者都踩過的坑。

為了從根本解決這些問題,Python 核心團隊推動了 PEP 773 提案,正式引入 Python Install Manager(PyManager)。這不只是工具層面的改進,更是官方發行策略的重大轉變:

  • 傳統完整安裝程式已在 Python 3.14 標記為 Deprecated
  • 預計從 Python 3.16 起停止提供完整安裝程式
  • PyManager 深度整合 Windows「應用程式執行別名(App Execution Aliases)」,解決 py.exe 與系統路徑長期以來的模糊地帶

💡 與社群工具的定位差異: condapyenv-win 屬於社群解決方案;PyManager 是由 CPython 核心團隊官方維護的原生方案,透過 MSIX 格式提供自動更新,是追求「官方標準」與「長期穩定性」的首選。

安裝與初始設定

安裝方式

環境建議方式
一般開發機Microsoft Store 或 winget install Python.PyManager
企業 / Windows Server 2019官方 MSI 安裝包(不支援 MSIX sideloading)

首次設定

安裝完成後,執行以下指令完成互動式初始設定,-y 參數跳過所有確認提示,適合自動化部署腳本:

pymanager install --configure -y

這一步會設定好系統層級的 App Execution Aliases,讓 pythonpy 等指令正確指向 PyManager 管理的執行環境。

py 指令:常用版本管理操作

py.exe 是 PyManager 提供的高階進入點,負責根據當前上下文(虛擬環境、Shebang 宣告、全域設定)智慧選擇正確的直譯器版本。

常用指令速查

# 列出所有可安裝版本(含線上版本)
py list --online

# 安裝指定版本
py install 3.13

# 以預設版本執行腳本
py my_script.py

# 卸載指定版本
py uninstall 3.12

# 完整清除所有 PyManager 管理的執行環境
py uninstall --purge

全域別名刷新

當透過 pip 安裝了 blackpytest 等工具後,若需更新全域指令別名,加上 -vv 可顯示詳細的刷新過程,方便確認別名是否正確建立:

py install --refresh -vv

版本選擇的優先順序

py 在決定使用哪個版本時,依照以下優先序判斷:

  1. 已啟動的虛擬環境 最優先
  2. 命令行版本參數 例如 py -V:3.14
  3. 腳本 Shebang 宣告 例如 #!/usr/bin/python3.12
  4. 全域預設值PYTHON_MANAGER_DEFAULT 環境變數或設定檔決定

進階指令

指令說明
py --list(或 -0p列出本機所有已安裝版本及其路徑
py -V:3.14 script.py強制以特定版本執行腳本
py exec -V:3.14 script.py版本不存在時自動觸發安裝(Install-on-demand)
py list --only-managed僅列出由 PyManager 管理的版本
py install 3.13t安裝 Free-threaded 實驗性版本(PEP 703)

💡 注意: 安裝 PyManager 後,pythonpy 通常指向同一預設版本,但 python 本質上是系統層級的 App Execution Alias。若遇到「找不到指令」的錯誤,請至 Windows 設定 → 應用程式執行別名 確認設定是否啟用。

pymanager 指令:自動化與企業部署

對於需要穩定非互動式執行的場景(CI/CD 流程、自動化腳本、企業批次部署),pymanager 提供比 py 更具確定性的行為:無參數執行時顯示說明文件而非啟動 REPL,有效防止腳本因參數遺漏而掛起(Hanging)。

安全性:索引簽名驗證

企業環境中,可在設定檔啟用 requires_signature: true,讓 pymanager 驗證下載索引的 Authenticode 簽名,防止運行時來源被竄改。

離線部署

在無法直接連網的伺服器環境,可建立離線索引後進行內網鏡像部署:

# 建立離線索引
pymanager install --download=C:\offline-index

# 從離線索引安裝
pymanager install --source=C:\offline-index 3.13

工作流程示範:隔離環境的標準建立方式

以下是建構一個乾淨隔離專案環境的完整流程:

# 1. 確認可用版本
py list --online

# 2. 安裝目標版本
py install 3.13

# 3. 建立專案虛擬環境
python -m venv .venv

# 4. 啟動虛擬環境(PowerShell)
.\.venv\Scripts\Activate.ps1

# 5. 安裝套件後,更新全域別名(加 -vv 確認執行結果)
py install --refresh -vv

Shebang 機制:實現跨平台可移植性

PyManager 在 Windows 上模擬了 Unix 的 Shebang 解析邏輯,讓同一個腳本可在 Linux 伺服器與 Windows 開發機之間無縫切換:

#!/usr/bin/env python3       # 動態尋找預設環境或目前活動的虛擬環境
#!/usr/bin/python3.12        # 強制指定版本,PyManager 會正確對應至 Windows 的實際路徑

Install-on-demand: 若腳本 Shebang 宣告了尚未安裝的版本,PyManager 會根據設定自動提示安裝,或在 CI 環境中直接下載,省去手動配置的成本。

路徑管理注意事項

PyManager 預設將全域別名存放於 %LocalAppData%\Python\bin。若需在不透過 py 的情況下直接執行 python3.14.exe,請手動將此路徑加入系統 PATH。

PyManager 也提供解除 Windows MAX_PATH 260 字元限制的功能,對於路徑層級較深的專案(如 monorepo)尤其有用。

疑難排解

問題解決方式
python 指令無效至 Windows 設定 → 應用程式執行別名,確認 python.exe 指向 Python (default)
pip 安裝的工具找不到執行 py install --refresh -vv 重新生成全域別名
設定不生效PyManager 設定優先序:Registry > 環境變數 > pymanager.json;確認 %AppData%\Python\pymanager.json 格式正確
企業環境安裝失敗Windows Server 2019 不支援 MSIX,改用官方 MSI 安裝包

結語

Python Install Manager 代表了 Windows 平台 Python 環境管理的官方新標準。透過 pypymanager 兩個指令的分工,開發者得以在日常操作與自動化部署之間靈活切換,告別手動管理 PATH 的時代,專注於真正重要的事:寫好程式碼。