背景: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與系統路徑長期以來的模糊地帶
💡 與社群工具的定位差異:
conda、pyenv-win屬於社群解決方案;PyManager 是由 CPython 核心團隊官方維護的原生方案,透過 MSIX 格式提供自動更新,是追求「官方標準」與「長期穩定性」的首選。
安裝與初始設定
安裝方式
| 環境 | 建議方式 |
|---|---|
| 一般開發機 | Microsoft Store 或 winget install Python.PyManager |
| 企業 / Windows Server 2019 | 官方 MSI 安裝包(不支援 MSIX sideloading) |
首次設定
安裝完成後,執行以下指令完成互動式初始設定,-y 參數跳過所有確認提示,適合自動化部署腳本:
pymanager install --configure -y
這一步會設定好系統層級的 App Execution Aliases,讓 python、py 等指令正確指向 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 安裝了 black、pytest 等工具後,若需更新全域指令別名,加上 -vv 可顯示詳細的刷新過程,方便確認別名是否正確建立:
py install --refresh -vv
版本選擇的優先順序
py 在決定使用哪個版本時,依照以下優先序判斷:
- 已啟動的虛擬環境 最優先
- 命令行版本參數 例如
py -V:3.14 - 腳本 Shebang 宣告 例如
#!/usr/bin/python3.12 - 全域預設值 由
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 後,
python與py通常指向同一預設版本,但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 環境管理的官方新標準。透過 py 與 pymanager 兩個指令的分工,開發者得以在日常操作與自動化部署之間靈活切換,告別手動管理 PATH 的時代,專注於真正重要的事:寫好程式碼。