Windows多版本Python共存时,怎么在命令行指定版本运行
详细讲解在Windows多版本Python共存环境下,如何通过官方py.exe启动器在命令行指定Python版本运行脚本、启动交互终端及管理第三方库,并排查应用别名与PATH环境变量冲突。
一、核心机制:Windows 官方 Python 启动器(py.exe)
在 Windows 上安装官方 Python 时(从 Python 3.3 及更高版本起),安装向导默认会勾选并安装一个轻量级的全局程序:py.exe(以及窗口程序 pyw.exe)。它遵循 Python 官方标准 PEP 397,专门解决 Windows 平台下的多版本调度问题。
很多开发者习惯于直接在命令行敲 python,但这在多版本共存时往往会带来麻烦:Windows 仅仅根据系统环境变量 PATH 中的先后顺序执行排在最前面的那个 python.exe。一旦安装了新版本或者某个安装包重排了 PATH,默认调用的版本就会在不知不觉中发生改变。
相比之下,py.exe 默认安装在系统的全局路径 C:\Windows\py.exe 中,任何命令行窗口(CMD、PowerShell、Windows Terminal 等)都能无条件直接访问。它的核心作用不是充当解释器,而是一个“调度中枢”:通过读取注册表和命令行参数,将任务精准转发给指定的 Python 解释器。
二、第一步:探查系统当前已识别的所有 Python 版本
在指定版本运行之前,首先应当查看当前系统中已经被 py.exe 发现并注册的所有 Python 运行时版本。
打开 CMD 或 PowerShell,输入以下命令之一:
py --list
# 或者使用简写参数
py -0
-V:3.10 Python 3.10 (64-bit)
-V:3.8-32 Python 3.8 (32-bit)
输出结果包含三个关键信息:
- 版本参数标签(如
-V:3.12):冒号后面的部分即为后续在命令行中可以直接引用的版本参数。 - 默认版本标记(星号
*):带有星号的版本表示如果仅输入py而不带版本参数时,系统将默认启用的解释器。 - 位数与架构(如
64-bit/32-bit):清晰标明各个安装实例是 64 位还是 32 位版本。
三、常用命令:在终端直接指定特定版本执行
确认了本地安装的版本标签后,即可通过 py -<version> 在命令行按需调度不同版本。
1. 运行指定的 Python 脚本文件
若当前有一个名为 main.py 的脚本,希望强制使用 Python 3.10 运行,只需执行:
py -3.10 main.py
如果需要使用 Python 3.12 执行同一个脚本,只需修改参数:
py -3.12 main.py
即使系统安装了 Python 2.7 与 3.x,也可以通过大版本简写快速区分:py -2 script.py 或 py -3 script.py。
2. 启动特定版本的交互式终端(REPL)
如果只是想进入某版本的交互式解释器测试语法,直接输入带有版本号的 py 命令,不加任何文件名:
py -3.10
Type "help", "copyright", "credits" or "license" for more information.
>>>
四、关键安全准则:如何为指定版本安装第三方包(pip)
pip install xxx!因为单纯的 pip 会调用环境变量 PATH 中排在最前面的 pip 脚本,导致扩展包被安装进不可预期的 Python 版本中,从而在运行时报出 ModuleNotFoundError。
标准做法是借助 py.exe 的 -m 参数,显式将 pip 模块绑定到目标 Python 版本上:
# 为 Python 3.10 安装 requests 库
py -3.10 -m pip install requests
# 为 Python 3.12 安装 pandas 和 numpy
py -3.12 -m pip install pandas numpy
# 查看 Python 3.10 当前已安装的所有第三方包
py -3.10 -m pip list
通过 py -<version> -m pip,能确保安装行为 100% 作用于指定版本的 site-packages 目录,彻底杜绝包环境污染与定位混乱。
五、进阶调度:指定架构、默认版本配置与 Shebang 脚本指令
1. 区分 32 位与 64 位版本
如果因兼容某些特定硬件驱动或旧 DLL 动态库,在同一台机器上同时安装了 32 位和 64 位的 Python 3.8,可以在版本号后追加位数后缀:
# 启动 32 位的 Python 3.8
py -3.8-32 main.py
# 启动 64 位的 Python 3.8
py -3.8-64 main.py
2. 设置当前终端或系统的默认 Python 版本
当直接输入 py script.py 而不带版本参数时,启动器会使用默认版本。如果想临时或永久改变这个默认目标,有以下两种方式:
-
通过环境变量临时设置:在当前命令行会话中设置
PY_PYTHON环境变量:
设置后,在当前窗口直接敲set PY_PYTHON=3.10py main.py就会默认采用 Python 3.10。 -
通过 py.ini 配置文件永久固化:在用户的配置目录
%LOCALAPPDATA%\py.ini文件(若不存在可新建)中写入配置:[defaults] python=3.10
3. 在脚本首行使用 Shebang(#!)声明版本
Windows 上的 py.exe 完美支持类 Unix 风格的 Shebang 注释。只需在 .py 脚本的第一行写明期望的版本:
#!python3.10
import sys
print(f"当前运行解释器版本为: {sys.version}")
此时在终端中直接运行:
py script.py
py.exe 会自动读取第一行注释,并调度 Python 3.10 来解释执行该脚本,无需在命令行手动附带 -3.10 参数。
六、三种多版本调用方式对比与选型
在 Windows 开发日常中,除了官方 py.exe 外,开发者有时还会接触到直接输入绝对路径或创建虚拟环境。以下对三种常见方式进行对比:
| 对比维度 | 方案一:官方 py.exe(推荐) | 方案二:绝对路径 / 自定义别名 | 方案三:项目虚拟环境 (venv) |
|---|---|---|---|
| 调用示例 | py -3.10 main.py |
"C:\Python310\python.exe" main.py |
python main.py(激活环境后) |
| 环境变量依赖 | 无(由 py 启动器集中路由) | 高(依赖全路径或 PATH 前后位置) | 激活后临时置顶当前环境 |
| pip 管理安全性 | 高(配合 -m pip 明确无误) |
中(容易漏写绝对路径导致串包) | 极高(完全隔离在项目目录内部) |
| 配置成本 | 零成本(官方安装自带) | 繁琐(需手动维护脚本或别名) | 每个项目需执行一次创建命令 |
| 推荐使用场景 | 日常快速测试、轻量脚本、单机调试 | 服务器固定批处理或自动化 CI 流程 | 团队协作项目、生产级软件开发 |
七、工程最佳实践:使用特定版本创建隔离虚拟环境
对于需要长期维护的实际项目,最稳健的做法并不是在全局环境中反复指定版本,而是使用 py.exe 为该项目创建专属的虚拟环境(venv)。
在项目根目录下执行:
# 指定使用 Python 3.10 在当前目录下创建名为 .venv 的虚拟环境
py -3.10 -m venv .venv
创建完成后,激活该虚拟环境:
# CMD 终端中执行
.venv\Scriptsctivate.bat
# PowerShell 终端中执行
.venv\Scripts\Activate.ps1
激活环境后,命令行提示符前会出现 (.venv) 标识。在当前激活状态下,直接输入 python 或 pip 都会严格锁定为创建时指定的 Python 3.10 版本,既不需要额外加版本参数,也保证了第三方包与系统全局环境彻底隔离。
八、常见疑难排查与避坑指南
1. 在终端输入 python 弹出微软应用商店(Microsoft Store)
这是 Windows 10/11 上最常见的干扰项。系统默认内置了指向应用商店的快捷启动别名。如果 PATH 中没有找到有效的 Python,系统就会自动拦截命令并跳转商店。
排查与关闭方法:
- 打开 Windows「设置」->「应用」->「高级应用设置」->「应用执行别名」。
- 在列表中找到“应用安装程序 (python.exe)”与“应用安装程序 (python3.exe)”。
- 将这两项的开关全部切换为关闭(Off)。
2. 提示“不是内部或外部命令,也不是可运行的程序”
如果执行 py 命令时出现该提示,说明在安装 Python 时取消了默认勾选的“py launcher”。
解决方法:下载任意已安装版本的官方 Python 安装包(例如 python-3.10.x.exe),双击运行并选择 Modify(修改),在可选功能(Optional Features)页面中确保勾选 “py launcher” 及 “for all users”,点击继续安装即可快速补齐 py.exe。
3. 提示“Requested runtime ... is not installed”
当执行 py -3.9 时,如果启动器报错提示找不到该运行时,通常是因为:
- 本地确实未安装该版本,可通过
py --list查看当前识别出的具体版本; - 使用的是便携版(绿色免安装解压版),此类版本不会向 Windows 注册表写入注册信息,导致
py.exe无法自动发现。针对此类环境,建议使用官方安装程序安装,或在py.ini中手动指定其绝对路径。
九、常用命令速查总结
| 操作目标 | 标准推荐命令 | 说明 |
|---|---|---|
| 列出所有已识别版本 | py --list 或 py -0 |
星号 * 代表当前默认版本 |
| 指定版本运行脚本 | py -3.10 script.py |
替换为目标大版本+次版本 |
| 启动特定版本交互环境 | py -3.12 |
直接进入 REPL |
| 为特定版本安装依赖库 | py -3.10 -m pip install <package> |
避免直接输入裸跑 pip |
| 区分 32/64 位执行 | py -3.8-32 script.py |
后缀显式指定架构 |
| 创建特定版本虚拟环境 | py -3.10 -m venv .venv |
工程项目开发首选隔离方式 |
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













