virtualenv

virtualenv 是 Python 虚拟环境管理工具,用于创建隔离的 Python 运行环境。Python 3 内置了轻量级的 venv 模块。

#type / concept #status / evergreen #tech / lang / python #resource / python

[!info] related notes

virtualenv

一句话定义

virtualenv 是 Python 的虚拟环境管理工具,用于创建隔离的 Python 运行环境,避免全局包冲突。Python 3 内置了轻量级的 venv 模块。

核心内容

解决什么问题

在过去,所有通过 pip install 安装的包都挤在系统全局的 Python 环境中,极易引发版本冲突:

  • 项目 A 需要 Django 3
  • 项目 B 需要 Django 4
  • 两者无法共存

核心功能

只做一件事:创建纯净、隔离的 Python 运行环境

不做什么

  • 不管理依赖(需要手动维护 requirements.txt
  • 不锁定版本(没有 lock 文件机制)
  • 不管理 Python 版本

virtualenv vs venv

特性virtualenvvenv (内置)
安装需要 pip install virtualenvPython 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

最佳实践

  1. 每个项目一个虚拟环境
  2. 使用 venv 而非 virtualenv(除非需要高级功能)
  3. 配合 requirements.txt 管理依赖
  4. 将虚拟环境目录加入 .gitignore

适用场景

  • ✅ 简单的单文件脚本
  • ✅ 学习和实验
  • ✅ 不需要依赖锁定的项目
  • ✅ 已有成熟项目使用 requirements.txt
  • ❌ 需要严格依赖锁定的项目(用 Poetry/uv)
  • ❌ 需要发布到 PyPI 的库(用 Poetry)
  • ❌ 新项目(推荐用 uv)
创建于 2025/1/1 更新于 2026/5/27