怎么用指定Python版本创建虚拟环境

木白
木白
发布时间:2026-11-13| 7人浏览过
原创

详细讲解如何在Windows、macOS与Linux系统下指定特定Python版本创建虚拟环境,涵盖原生venv、Python Launcher、virtualenv及现代工具uv的具体命令、内部机制解析与常见报错排查。

Python 工程实践指南
创建指定 Python 版本的虚拟环境,核心只有一条铁律:虚拟环境本身不附带 Python 解释器编译功能,它所使用的 Python 版本严格取决于调用创建命令的基础解释器。无论是 Windows、macOS 还是 Linux,只要定位并调用目标版本的 Python 可执行文件执行 -m venv,即可在当前目录生成对应版本的隔离环境。对于本地尚未安装的目标版本,现代工具 uv 则提供了自动下载并直接创建虚拟环境的轻量途径。

一、底层定则:虚拟环境版本由谁决定?

许多开发者在尝试创建 Python 3.9 环境时,若直接在终端执行 python -m venv .venv,往往会发现新生成的虚拟环境依然是系统当前默认的 Python 3.12。产生这一现象的根本原因在于:venv 是 Python 标准库自带的一个模块,当你在终端敲击 python 时,系统会通过环境变量 PATH 寻找优先级最高的那一个解释器,并由该解释器运行其自身的 venv 模块。

因此,要“指定”Python 版本,本质就是显式指定哪一个 Python 解释器来运行 -m venv。只要目标解释器被成功调用,它就会抓取自己的二进制路径与核心库版本,在目标文件夹中生成一份对应的配置文件 pyvenv.cfg,并将该环境永久绑定到对应版本上。

怎么用指定Python版本创建虚拟环境
图 1:指定 Python 版本创建虚拟环境的核心机制与映射原理

二、Windows 系统下的推荐操作步骤

Windows 系统拥有官方提供的 Python 启动器(Python Launcher,即 py.exe),这是管理和指定多版本 Python 最方便的工具。如果在安装 Python 时勾选了默认选项,py.exe 已经被放置在系统的系统目录中。

1. 使用 Python Launcher (py) 快速创建

第一步是列出系统当前已经识别到的 Python 版本列表:

py --list
-V:3.12 * Python 3.12.2 (64-bit) -V:3.10 Python 3.10.11 (64-bit) -V:3.8 Python 3.8.10 (64-bit)

确认列表中存在所需版本(例如 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
怎么用指定Python版本创建虚拟环境
图 2:跨平台指定 Python 版本的调用决策树与操作步骤

三、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
/opt/homebrew/bin/python3.10 /usr/local/bin/python3.9 /usr/bin/python3

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 解释器的具体位置:

怎么用指定Python版本创建虚拟环境
图 3:虚拟环境内部结构剖析与 pyvenv.cfg 的版本映射机制

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
Using CPython 3.9.18 Creating virtual environment at: .venv39 Activate with: source .venv39/bin/activate

创建后的虚拟环境符合标准结构,你可以继续使用常规的 source .venv39/bin/activate 进行激活,使用体验与原生环境完全一致。

六、验证与常见错误排查

创建并激活虚拟环境后,务必通过以下三步排查闭环验证环境配置:

怎么用指定Python版本创建虚拟环境
图 4:虚拟环境版本验证闭环与典型错误排查决策树

1. 验证三步法

  1. 检查可执行文件归属:在 Linux/macOS 运行 which python,在 Windows 运行 where python,第一行必须指向当前项目的 .venv/bin/python 或 .venv\Scripts\python.exe。
  2. 确认输出版本:运行 python --version,确保版本号与预期一致。
  3. 检查底层运行路径:运行单行脚本确认实际生效的解释器:
    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 版本创建方式进行综合横向对比:

怎么用指定Python版本创建虚拟环境
图 5:主流指定版本创建虚拟环境方案对比与选型全景图
方案 命令格式 前置要求 适用场景
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,能够显著精简环境安装与维护成本。

相关专题:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。