Windows 上 Python 多版本共存实战:py 启动器与 venv 的组合拳
为什么需要多版本共存
在 Windows 上做 Python 开发,几乎绕不开一个现实问题:老项目跑在 Python 3.9,新项目想用 3.12 的新特性,而公司内部工具链还停留在 3.8。如果把它们装到同一个环境里互相"覆盖",轻则依赖解析失败,重则整个解释器目录被写坏。多版本共存 + 每个项目独立虚拟环境,是成本最低、最不容易翻车的方案。
第一招:官方 py 启动器
Windows 版 Python 安装包自带一个 py 启动器(Python Launcher),它是多版本管理的地基。
py -0 :: 列出本机所有已安装版本
py -3.12 -V :: 用 3.12 运行
py -3.9 -V :: 用 3.9 运行
py -3.12 -m pip install requests :: 给指定版本装包
两个实用细节:
1. py -0p 能打印每个版本的实际安装路径,排查"到底装在哪"很方便;
2. 脚本开头写 #! python3.11(shebang),直接 py script.py 会自动按声明版本执行,跨版本调度不需要改命令。
第二招:venv 给每个项目"划地盘"
解释器多版本只是第一步,依赖隔离要靠虚拟环境。从 Python 3.3 起,venv 是标准库成员,不需要额外安装任何工具:
py -3.12 -m venv .venv312
.venv312/Scripts/activate
python -V && pip -V
激活后 python、pip 都指向虚拟环境内部,装多少包都不会污染全局。退出用 deactivate。
两个容易踩的坑:
- 路径里的空格:把项目放在带空格的目录(如 Program Files)下,某些老版本工具链会解析出错,建议项目目录用纯英文无空格路径;
- PowerShell 执行策略:首次激活报"禁止运行脚本"时,执行一次
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned即可,不要图省事用管理员全局放开。
第三招:requirements.txt 锁定依赖
虚拟环境解决了"隔离",但没有解决"复现"。项目根目录放一份 requirements.txt:
pip freeze > requirements.txt :: 导出当前环境
pip install -r requirements.txt :: 新环境一键还原
如果项目对外发布,建议手写精简版(只列直接依赖,版本用 ~= 区间),把 pip freeze 的全量快照留给部署环境用。
组合起来是什么效果
我本机目前的常态是:全局只留一个最新稳定版,其余版本按需安装;每个项目一个 .venv 目录(记得加进 .gitignore);换机器或同事接手时,py -0 确认版本、pip install -r requirements.txt 还原依赖,十分钟内恢复开发环境。
不需要 poetry、conda 这类重型工具,官方自带的三件套(py + venv + pip)足够覆盖 90% 的日常场景。工具越少,出问题的面越小。
- 点赞
- 收藏
- 关注作者
评论(0)