怎么用指定Python版本创建虚拟环境
详细讲解如何在Windows、macOS与Linux系统下指定特定Python版本创建虚拟环境,涵盖原生venv、Python Launcher、virtualenv及现代工具uv的具体命令、内部机制解析与常见报错排查。
-m venv,即可在当前目录生成对应版本的隔离环境。对于本地尚未安装的目标版本,现代工具 uv 则提供了自动下载并直接创建虚拟环境的轻量途径。
一、底层定则:虚拟环境版本由谁决定?
许多开发者在尝试创建 Python 3.9 环境时,若直接在终端执行 python -m venv .venv,往往会发现新生成的虚拟环境依然是系统当前默认的 Python 3.12。产生这一现象的根本原因在于:venv 是 Python 标准库自带的一个模块,当你在终端敲击 python 时,系统会通过环境变量 PATH 寻找优先级最高的那一个解释器,并由该解释器运行其自身的 venv 模块。
因此,要“指定”Python 版本,本质就是显式指定哪一个 Python 解释器来运行 -m venv。只要目标解释器被成功调用,它就会抓取自己的二进制路径与核心库版本,在目标文件夹中生成一份对应的配置文件 pyvenv.cfg,并将该环境永久绑定到对应版本上。
二、Windows 系统下的推荐操作步骤
Windows 系统拥有官方提供的 Python 启动器(Python Launcher,即 py.exe),这是管理和指定多版本 Python 最方便的工具。如果在安装 Python 时勾选了默认选项,py.exe 已经被放置在系统的系统目录中。
1. 使用 Python Launcher (py) 快速创建
第一步是列出系统当前已经识别到的 Python 版本列表:
py --list
确认列表中存在所需版本(例如 3.10)后,使用参数 -X.Y 即可直接指派对应版本创建虚拟环境:
py -3.10 -m venv .venv_py310
2. 使用具体可执行文件绝对路径
若安装的是绿色便携版或未注册到 Windows 系统的 Python,可以直接使用目标 python.exe 的完整路径执行创建命令。路径带有空格时请务必使用双引号包裹:
"C:\Users\username\AppData\Local\Programs\Python\Python39\python.exe" -m venv .venv_py39
3. 激活与验证
在 Windows PowerShell 或 CMD 中激活该虚拟环境:
# PowerShell 终端
.\.venv_py310\Scripts\Activate.ps1
# CMD 命令提示符
.\.venv_py310\Scripts\activate.bat
三、macOS 与 Linux 系统下的标准操作
在 macOS(使用 Homebrew 或官方 PKG)以及各 Linux 发行版(Ubuntu、Debian、CentOS 等)中,多个 Python 版本通常以带有版本后缀的可执行文件形式共存在 /usr/bin、/usr/local/bin 或 /opt/homebrew/bin 中。
1. 探查系统中已存在的版本别名
在终端中输入 which 或使用 Tab 自动补全查找可用的 Python 别名:
which -a python3.9 python3.10 python3.11 python3.12
2. 直接使用对应版本别名创建
确认目标命令存在后,直接以该名称调用 -m venv:
# 创建指定为 3.10 的虚拟环境
python3.10 -m venv .venv310
# 或者使用完整绝对路径创建
/opt/homebrew/bin/python3.10 -m venv .venv310
3. 激活环境
在类 Unix 系统的终端(bash/zsh)中执行 source 命令激活:
source .venv310/bin/activate
激活后执行 python --version,终端输出即会显示所指定的 Python 3.10 版本。退出虚拟环境只需执行:
deactivate
四、解剖虚拟环境:版本绑定的工作原理
为什么只要在创建时指定了一次,之后每次激活该虚拟环境就永远保持该版本?答案在于虚拟环境内部的静态配置文件 pyvenv.cfg。
打开任意由 venv 生成的文件夹根目录,都会发现这个只有几行的配置文件。它记录了创建该环境的基础 Python 解释器的具体位置:
pyvenv.cfg 中的主要字段包括:
- home:宿主 Python 可执行文件所在的目录。虚拟环境启动时,需要依赖此路径寻找标准库(如
os、sys、json等)。 - version:环境锁定的 Python 完整三位版本号(如 3.10.13)。
- executable:用于追踪初始创建该环境的宿主 Python 二进制实体。
pyvenv.cfg 以及虚拟环境内脚本写入的是绝对路径,若重命名或移动虚拟环境目录,或者卸载删除了宿主 Python,该虚拟环境将无法正确重定向标准库,导致环境损坏。正确做法是:删除原虚拟环境目录,重新在目标位置指定版本创建。
五、进阶方案:使用 uv 无需手动安装多版本
传统原生 venv 方案有一个前置约束:本地操作系统必须预先安装好对应的 Python 版本。如果机器上只有 Python 3.12,而需求是 3.9,传统方式必须先去 Python 官网下载 3.9 安装包进行安装配置。
现代 Python 工具链 uv(由 Astral 开发的高性能包管理工具)彻底解决了多版本获取的繁琐问题。如果机器上未安装指定版本,uv 会自动从官方托管源拉取独立的便携式 Python 运行时,无需管理员权限,也不污染系统全局环境。
# 无论本地是否安装 3.9,uv 会自动匹配或下载并直接创建 .venv
uv venv --python 3.9 .venv39
创建后的虚拟环境符合标准结构,你可以继续使用常规的 source .venv39/bin/activate 进行激活,使用体验与原生环境完全一致。
六、验证与常见错误排查
创建并激活虚拟环境后,务必通过以下三步排查闭环验证环境配置:
1. 验证三步法
- 检查可执行文件归属:在 Linux/macOS 运行
which python,在 Windows 运行where python,第一行必须指向当前项目的.venv/bin/python或.venv\Scripts\python.exe。 - 确认输出版本:运行
python --version,确保版本号与预期一致。 - 检查底层运行路径:运行单行脚本确认实际生效的解释器:
python -c "import sys; print(sys.executable); print(sys.version)"
2. 常见问题与解决方法
-
报错
No suitable Python runtime found或command not found:
说明系统内压根不存在该版本的 Python。如果是 Windows,请重新运行 Python 安装包并确保勾选了“py launcher”;如果是 macOS/Linux,请检查 PATH 设置或直接借助uv自动拉取。 -
激活后版本依然是全局旧版本:
常见原因是当前 Shell 的配置文件(如~/.bashrc或~/.zshrc)中存在强行重写python命令的别名(alias),例如alias python=/usr/bin/python3。此时别名优先级高于环境变量 PATH。使用unalias python或在配置文件中移除该行即可恢复正常。 -
Windows 提示“无法加载文件 Activate.ps1,因为在此系统上禁止运行脚本”:
这是 PowerShell 默认的执行策略(ExecutionPolicy)限制。在终端执行Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser即可解除当前用户的脚本拦截。
七、主流方案横向对比与选型建议
为了帮助你在不同的开发场景下做出最合理的选择,下表将本文介绍的指定 Python 版本创建方式进行综合横向对比:
| 方案 | 命令格式 | 前置要求 | 适用场景 |
|---|---|---|---|
| Windows py 启动器 | py -3.X -m venv .venv |
系统已安装目标 Python | Windows 本地开发,官方标准,体验最顺畅 |
| macOS/Linux 版本别名 | python3.X -m venv .venv |
PATH 中存在目标版本可执行文件 | 服务器运维、本地标准类 Unix 开发 |
| 直接绝对路径 | /path/to/python -m venv .venv |
知晓解释器物理安装位置 | 自编译 Python、多版本并存且别名冲突时 |
| 现代工具 uv | uv venv --python 3.X |
仅需安装 uv(无需预装该 Python) | 跨平台项目、CI 持续集成、需要极速部署 |
| 第三方 virtualenv | virtualenv -p python3.X .venv |
已安装 virtualenv 库及目标版本 | 需要维护老旧 Python 2/3 混编项目 |
总结建议:在日常本地开发中,只要目标 Python 已经安装在电脑上,优先使用平台原生的方式(Windows 用 py -3.X -m venv,macOS/Linux 用 python3.X -m venv),无需依赖任何第三方外部工具;而在涉及多机器同步、CI/CD 自动化流水线或者需要频繁切换不同小版本(如 3.9、3.10、3.11)的场景下,推荐采用 uv venv --python 3.X,能够显著精简环境安装与维护成本。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













