venv 是 Python 内置的虚拟环境管理工具,提供了一种便捷方式,在同一系统中创建多个相互隔离的 Python 环境。每个环境都有独立的解释器和包安装路径,可避免不同项目之间的依赖冲突,是现代 Python 开发中的推荐做法。

自 Python 3.3 起,venv 成为官方内置模块,无需额外安装。

常见应用场景:

(1)为每个项目创建独立的 Python 包环境。

(2)避免全局环境依赖冲突。

(3)在无权限修改系统环境时本地安装 Python 包。

(4)为不同 Python 版本提供隔离测试环境。

◆ ◆

核心概念

1、虚拟环境

一个包含独立 python 可执行文件及其专属 site-packages 的目录结构。

2、隔离性

虚拟环境不会影响系统全局 Python,也不受其影响。

3、激活与退出

通过激活脚本将虚拟环境切换为当前命令行默认环境,退出后恢复为系统环境。

◆ ◆

基本用法

1、创建虚拟环境

python -m venv myenv

上述命令会在当前目录下创建一个名为 myenv 的文件夹,结构如下:

myenv/
├── bin/ or Scripts/        # Python 可执行文件及工具(Linux/macOS or Windows)
├── include/                # C 头文件
├── lib/                    # Python 标准库副本
└── pyvenv.cfg              # 环境配置信息

2、激活虚拟环境

Windows(CMD):

myenv\Scripts\activate.bat

Windows(PowerShell):

myenv\Scripts\Activate.ps1

Linux/macOS:

source myenv/bin/activate

3、退出虚拟环境

deactivate

4、删除虚拟环境

虚拟环境是纯文件结构,删除目录即可:

rmdir myenv /s/q # 或 del /s myenv

◆ ◆

应用举例

例 1:命令行方式创建并使用虚拟环境

python -m venv myenv

source myenv/bin/activate      # Linux/macOS
# myenv\Scripts\activate.bat  # Windows

pip install requests

deactivate

例 2:Python 脚本方式创建虚拟环境

import venv

# 创建虚拟环境并启用 pip
venv.create("project_env", with_pip=True)

例 3:创建虚拟环境并共享系统 site-packages

import venv

builder = venv.EnvBuilder(system_site_packages=True, with_pip=True)
builder.create("shared_env")

例 4:使用 subprocess 在虚拟环境中运行脚本

import subprocess
import os

# 激活路径因平台不同而异,这里以 Linux/macOS 为例
venv_path = "myenv"
python_exec = os.path.join(venv_path, "bin", "python")
subprocess.run([python_exec, "--version"])

例 5:使用 shutil 删除虚拟环境

import shutil

shutil.rmtree("myenv")  # 安全地删除整个虚拟环境目录

◆ ◆

常用函数速览

当你使用 venv 创建虚拟环境时,实际上是通过 EnvBuilder 类来管理和配置虚拟环境的创建过程。

venv.EnvBuilder(...)

用于配置并构建虚拟环境。

参数

system_site_packages:是否继承系统的 site-packages,默认 False

clear:是否清除目标目录中的已有文件

with_pip:是否在虚拟环境中安装 pip(推荐设置为 True)

upgrade_deps:是否升级 pip 和 setuptools

常用方法:

EnvBuilder 类提供了多种方法来帮助我们创建和定制虚拟环境。

create(env_dir)

创建虚拟环境。

ensure_directories(env_dir)

确保虚拟环境的必要目录存在。

install_requirements(env_dir, requirements)

安装虚拟环境所需的依赖库(如使用 pip)。

get_python_executable(env_dir)

获取虚拟环境中的 Python 可执行文件路径。

update_defaults(**kwargs)

更新默认的虚拟环境设置参数。

discover(env_dir)

获取虚拟环境的相关配置信息(较少使用)。

◆ ◆

补充说明

1、venv 是官方推荐的虚拟环境管理工具,适用于大多数普通开发需求。

2、若需要更强大的环境复制、依赖导出、跨平台封装等功能,可考虑使用 virtualenv 或 poetry、[conda] 等第三方工具。

3、若激活脚本权限受限(如 PowerShell 策略),可执行以下命令解除限制:

# powershell
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

点赞有美意,赞赏是鼓励