虚拟环境 venv

venvPython 3.3+ 内置的标准库模块,用于创建轻量级的“虚拟环境”(Virtual Environment)。每个虚拟环境拥有独立的 Python 解释器副本和独立的包安装目录,从而实现项目之间的依赖隔离。

核心目标:避免不同项目之间的依赖冲突,例如:

  • 项目 A 需要 Django 3.2

  • 项目 B 需要 Django 5.0 使用 venv 可以让两个项目互不干扰。

venv 的基本使用

  1. 创建虚拟环境

python3 -m venv myenv

myenv 是虚拟环境的目录名,你可以自定义,常见命名有 .venvvenvenvmyproject_env。推荐使用.venv(带点表示隐藏),简洁且被许多工具(如 VS Code)自动识别。

  1. 激活虚拟环境

# macOS/Linux
source myenv/bin/activate

# windows
myenv\Scripts\activate

激活后,命令行提示符前会显示环境名,例如:

(myenv) $

此时你使用的 pythonpip 都指向虚拟环境中的副本。

  1. 退出虚拟环境

执行后,恢复使用系统的 Python 和 pip

在虚拟环境中安装包

激活环境后,使用 pip 安装的包只会安装到该环境:

包会被安装到:

系统环境和其他虚拟环境完全不受影响。

依赖管理

为了便于项目共享和部署,通常使用 requirements.txt 文件记录依赖。

  1. 生成依赖文件

该文件内容类似:

  1. 安装依赖文件中的包

circle-check

venv 的工作原理

venv 并不会复制整个 Python 解释器,而是通过符号链接(symlink)或硬链接来节省空间,仅创建必要的文件结构:

  • myenv/bin/python → 指向系统 Python 解释器

  • myenv/bin/pip → 使用独立的 site-packages 目录

  • myenv/pyvenv.cfg → 配置文件,记录基础 Python 路径和是否继承系统包

circle-exclamation

venv vs 其他工具对比

工具
说明
优点
缺点

venv (内置)

Python 标准库,开箱即用

无需安装,简单可靠

功能较基础

virtualenv

第三方工具,功能更丰富

支持旧版 Python,插件多

需额外安装

conda

Anaconda 的环境管理器

支持非 Python 包,跨平台

较重,学习成本高

pipenv

结合 pip 和 venv

自动管理 Pipfile

维护不稳定

poetry

现代化 Python 项目管理

依赖解析强,发布方便

学习曲线陡

✅ 推荐:日常开发优先使用 venv + pip + requirements.txt,简单可控。

最后更新于