virtualenv
virtualenv 是 Python 虚拟环境管理工具,用于创建隔离的 Python 运行环境。Python 3 内置了轻量级的 venv 模块。
#type / concept
#status / evergreen
#tech / lang / python
#resource / python
[!info] related notes
- 所属 MOC: python-moc, development-environment-moc
- 前置概念: python
- 并列概念: poetry, uv
- 关系笔记: python-package-management-evolution
virtualenv
一句话定义
virtualenv 是 Python 的虚拟环境管理工具,用于创建隔离的 Python 运行环境,避免全局包冲突。Python 3 内置了轻量级的 venv 模块。
核心内容
解决什么问题
在过去,所有通过 pip install 安装的包都挤在系统全局的 Python 环境中,极易引发版本冲突:
- 项目 A 需要 Django 3
- 项目 B 需要 Django 4
- 两者无法共存
核心功能
只做一件事:创建纯净、隔离的 Python 运行环境
不做什么:
- 不管理依赖(需要手动维护
requirements.txt) - 不锁定版本(没有 lock 文件机制)
- 不管理 Python 版本
virtualenv vs venv
| 特性 | virtualenv | venv (内置) |
|---|---|---|
| 安装 | 需要 pip install virtualenv | Python 3 内置 |
| 功能 | 更丰富,支持更多选项 | 轻量级,基础功能 |
| 速度 | 稍快 | 稍慢 |
| 推荐 | 需要高级功能时 | 大多数场景 |
最小例子
使用 venv(推荐)
# 创建虚拟环境
python -m venv myenv
# 激活虚拟环境
# Unix/macOS
source myenv/bin/activate
# Windows
myenv\Scripts\activate
# 在虚拟环境中安装包
pip install requests
# 退出虚拟环境
deactivate
使用 virtualenv
# 安装 virtualenv
pip install virtualenv
# 创建虚拟环境
virtualenv myenv
# 指定 Python 版本
virtualenv -p /usr/bin/python3.8 myenv
# 激活和退出同上
依赖管理(手动)
# 导出依赖
pip freeze > requirements.txt
# 安装依赖
pip install -r requirements.txt
常用命令速查
| 命令 | 作用 |
|---|---|
python -m venv myenv | 创建虚拟环境(venv) |
virtualenv myenv | 创建虚拟环境(virtualenv) |
virtualenv -p python3.8 myenv | 指定 Python 版本 |
source myenv/bin/activate | 激活(Unix/macOS) |
myenv\Scripts\activate | 激活(Windows) |
deactivate | 退出虚拟环境 |
pip freeze > requirements.txt | 导出依赖 |
pip install -r requirements.txt | 安装依赖 |
rm -rf myenv | 删除虚拟环境 |
边界与易混淆点
局限性
- 只管环境隔离,不管依赖管理
- 需要手动维护
requirements.txt - 没有依赖锁定机制,多人协作可能因子依赖版本不同而出问题
- “在我的电脑上能跑,在你那里报错”的经典问题
不是
- 不是包管理器:只隔离环境,不管理依赖
- 不是 Poetry/uv 的替代品:功能更简单,适合简单场景
- 不是 Python 版本管理器:不能安装不同版本的 Python
最佳实践
- 每个项目一个虚拟环境
- 使用
venv而非virtualenv(除非需要高级功能) - 配合
requirements.txt管理依赖 - 将虚拟环境目录加入
.gitignore
适用场景
- ✅ 简单的单文件脚本
- ✅ 学习和实验
- ✅ 不需要依赖锁定的项目
- ✅ 已有成熟项目使用 requirements.txt
- ❌ 需要严格依赖锁定的项目(用 Poetry/uv)
- ❌ 需要发布到 PyPI 的库(用 Poetry)
- ❌ 新项目(推荐用 uv)