Windows下怎么用命令升级Python版本
详解在Windows系统下使用命令行升级Python版本的完整流程与方法,涵盖winget、Chocolatey、PowerShell静默安装、py启动器版本管理以及第三方包迁移与环境变量配置。
一、核心认知:Windows环境下Python的“升级”本质
在深入执行命令之前,需要明确Windows平台与其他系统(如Linux发行版中的包管理器就地替换)的一个关键底层差异:Windows上的Python次要版本(Minor Version,如3.10与3.12)属于相互独立的并行安装体系,不会直接覆盖旧目录。
具体表现为:
- 修订号补丁更新(Patch Update,例如 3.12.1 升级至 3.12.6):属于维护性升级,安装包通常会识别旧的同分支目录,直接替换二进制文件并完成同位覆盖升级。
- 次要版本跨代升级(Minor Update,例如 3.10.x 升级至 3.12.x):安装程序会在系统上建立全新的物理目录(如
C:\Program Files\Python312),旧版本的安装目录(如Python310)原封不动保留。因此,命令行升级的实质包含安装新内核、更新全局调度优先级、迁移扩展库三个环节。
二、第一步:运行环境探查与旧版本基准记录
在以管理员身份启动Windows Terminal或PowerShell后,首先需要运行探测命令,摸清当前主机的Python注册状态与已安装的三方库清单。
1. 查看当前终端正在响应的默认版本
python --version
示例输出:
Python 3.10.11
2. 列出系统已登记的所有Python版本路径
Windows内置的 py.exe(Python Launcher)是管理多版本共存的利器。通过它能够查出系统中全部由安装程序注册的Python实例及其绝对物理路径:
py -0p
示例输出:
Installed Pythons found by py Launcher for Windows
-3.10-64 * C:\Program Files\Python310\python.exe
-3.8-64 C:\Users\Admin\AppData\Local\Programs\Python\Python38\python.exe
输出中带有星号 * 的项代表当前 py 命令默认调用的版本。
3. 备份导出旧版本的第三方依赖库清单
因为新版本具有独立纯净的 site-packages 目录,升级后需要重新安装常用的扩展包。趁旧环境依然完整,先将其导出为清单文件:
# 如果当前默认版本是 3.10,直接导出
python -m pip freeze > "$HOME\Desktop\requirements_backup.txt"
# 或者显式指定旧版本导出
py -3.10 -m pip freeze > "$HOME\Desktop\requirements_backup.txt"
三、方法一:使用 Windows 内置包管理器 winget(首选方案)
Windows 10(1809及之后版本)和Windows 11均已预装微软官方的Windows应用包管理器(winget)。使用winget无需打开浏览器或手动寻找安装包,整套操作直接在命令行下完成。
1. 搜索官方源中最新的Python版本
winget search Python.Python
命令执行后将列出微软社区源中维护的官方安装包ID。常见标识形如 Python.Python.3.12、Python.Python.3.11 等。
2. 执行静默安装与版本升级
如果当前已安装Python 3.12的早期补丁(例如3.12.1),需要升级到当前分支最新版(如3.12.6),可直接使用升级命令:
winget upgrade Python.Python.3.12
如果希望从旧大版本(如Python 3.10)升级跨入全新的Python 3.12,由于winget将不同次要版本划分为独立的应用包ID,应使用标准安装命令进行拉取:
winget install Python.Python.3.12 --scope machine
--scope machine:指定安装范围为整台计算机(面向所有用户),安装路径将落入系统级目录 C:\Program Files\Python312,并自动为全局用户注册系统变量与 py.exe 启动器支持。若省略该参数,默认可能仅安装至当前用户的 AppData 目录。
四、方法二:使用第三方包管理器 Chocolatey 或 Scoop
对于在本地搭建了统一软件工程工具链的开发者,使用现有的包管理器可以更便捷地实现一体化升级。
1. Chocolatey 升级方式
以管理员权限运行PowerShell,首先检查过时包状态:
# 查看是否检测到新版本
choco outdated
# 执行自动升级
choco upgrade python -y
若需要锁定升级至指定版本,可以添加版本参数:
choco upgrade python --version=3.12.6 -y
2. Scoop 升级方式
Scoop采用用户空间的Shim分发机制,环境升级极为轻量:
# 刷新仓库元数据
scoop update
# 升级 Python 并重定向 shims 符号链接
scoop update python
五、方法三:PowerShell 一键下载并执行静默安装
在无法使用外部包管理器(如公司内网、高安全受控主机或无外网源访问权限的服务器)时,可通过PowerShell原生网络指令从官方下载安装程序,并通过静默安装开关完成一键升级。
# 1. 设定安装版本与下载目标
$version = "3.12.6"
$installerUrl = "https://www.python.org/ftp/python/$version/python-$version-amd64.exe"
$installerPath = "$env:TEMP\python-$version-amd64.exe"
# 2. 命令行下载安装程序
Write-Host "正在下载 Python $version 安装包..." -ForegroundColor Cyan
Invoke-WebRequest -Uri $installerUrl -OutFile $installerPath
# 3. 静默安装关键参数执行
Write-Host "开始静默安装并配置环境..." -ForegroundColor Cyan
$installArgs = "/quiet InstallAllUsers=1 PrependPath=1 Include_pip=1 Include_launcher=1 AssociateFiles=1"
Start-Process -FilePath $installerPath -ArgumentList $installArgs -Wait
# 4. 清理临时下载文件
Remove-Item -Path $installerPath -Force
Write-Host "Python $version 安装完成!" -ForegroundColor Green
/quiet:不弹出图形向导对话框,完全后台无人值守运行。InstallAllUsers=1:系统级安装,释放至 Program Files 目录。PrependPath=1:将新版 Python 目录前置加入系统 PATH 环境变量。Include_launcher=1:确保更新安装最新的系统级 py.exe 启动器。
六、关键步骤:升级后默认版本重定向与环境校验
许多开发者在完成安装后,在终端中重新输入 python --version,却发现终端依旧打印旧版本号,或者直接跳转打开了 Windows 应用商店。这通常由以下两个常见原因引起:
1. 使用 py.exe 绑定全局默认版本(推荐方案)
通过环境变量 PY_PYTHON,可以直接告知 Windows 启动器默认调用哪个版本,而无需频繁修改复杂的系统 PATH 字符串:
# 永久设定当前用户默认 Python 为 3.12
[Environment]::SetEnvironmentVariable("PY_PYTHON", "3.12", "User")
# 或者使用系统自带的 setx 工具
setx PY_PYTHON 3.12
设置完毕后,重新打开一个新的 PowerShell 窗口,执行验证:
py --version
若此时输出为 Python 3.12.x,则代表全局调度器已经成功重定向。
2. 排查并关闭“应用执行别名”冲突(0字节劫持问题)
Windows 10/11 默认将 %LOCALAPPDATA%\Microsoft\WindowsApps 加入了 PATH,当该路径排在新安装的 Python 目录前面时,输入 python 会触发微软商店引导。
解决方法:
- 打开 Windows“设置” -> “应用” -> “高级应用设置” -> “应用执行别名”;
- 在列表中找到“应用安装程序 (python.exe)”与“应用安装程序 (python3.exe)”,将其开关全部关闭。
3. 手动优化 PATH 变量优先级顺序
若依然希望直接敲击 python 命令运行新版,需要保证新版本路径排在最前面:
# 查看当前 Path 包含的 Python 条目
$env:Path -split ';' | Select-String "Python"
确保 C:\Program Files\Python312\ 和 C:\Program Files\Python312\Scripts\ 处于任何旧版本(如 Python310)之前。
七、依赖迁移与旧版本清理收尾
新版本安装并成为默认解释器后,需要将开发依赖项导入新环境,并按需卸载废弃旧版本。
1. 升级新版本内置的 pip 包管理器
py -3.12 -m pip install --upgrade pip
2. 从备份清单中恢复三方依赖库
# 批量还原第三方包
py -3.12 -m pip install -r "$HOME\Desktop\requirements_backup.txt"
package==1.0.0 调整为 package>=1.0.0),让 pip 自动拉取兼容新 Python 内核的发布包。
3. 干净卸载过期的旧版本
当确认新版本运行稳定且所有项目依赖就绪后,可以通过命令行将旧版本干净移除:
# 若原先通过 winget 安装旧版
winget uninstall Python.Python.3.10
# 校验卸载后的版本列表
py -0p
八、三种升级方案综合对比与常见问题排查
| 对比维度 | winget 方案(官方推荐) | Chocolatey / Scoop 方案 | PowerShell 静默安装方案 |
|---|---|---|---|
| 前置依赖 | 无(Win10 1809+ / Win11 自带) | 需提前安装 choco / scoop 客户端 | 无(系统原生内置 PowerShell) |
| 适用网络 | 需直连微软与 Python 官方 CDN | 依赖对应的第三方源访问 | 可配置内部网络镜像源或离线包 |
| 命令复杂度 | 低(标准单条命令) | 极低(单条 update 指令) | 中(需指定静默参数或编写短脚本) |
| 版本并存管理 | 优秀(与 py.exe 紧密配合) | 根据包策略可能覆盖或 Shim 隔离 | 极佳(参数完全可控) |
| 适用场景 | 个人日常开发机、现代办公系统 | 深度依赖包管理器工具链的工程师 | 批量部署、自动化运维、内网隔离主机 |
常见问题解答 (FAQ)
Q1:升级后在终端执行 python 提示“不是内部或外部命令”怎么办?
这是因为在安装时未勾选“添加环境变量”,或者未以管理员权限安装。此时可以直接使用系统常驻的启动器命令 py 代替 python,或者在 PowerShell 中以管理员权限执行 [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Program Files\Python312;C:\Program Files\Python312\Scripts", "Machine") 补充路径。
Q2:为什么运行 winget upgrade 时提示找不到 Python 可升级项?
如果当前安装的旧版本(如 3.10)与目标版本(如 3.12)属于不同的大版本,在 winget 中它们被注册为不同的软件包 ID。此时不能使用 upgrade,而必须使用 winget install Python.Python.3.12 进行全新安装,随后根据本文第六节重定向默认启动器即可。
Q3:升级后原先的项目虚拟环境(venv)需要重新创建吗?
强烈建议重新创建。虚拟环境内部的解释器软链接和二进制文件是与创建时的 Python 版本严格绑定的。若升级了全局版本,应在对应项目目录下删除旧的 .venv 文件夹,使用新命令 py -3.12 -m venv .venv 重新构建虚拟环境并激活安装依赖。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









