
1. 为什么需要虚拟环境?
- 依赖隔离:不同项目可能需要不同版本的 Python 或第三方库,虚拟环境可以避免版本冲突。
- 环境纯净:避免全局安装的依赖包污染系统环境。
- 便于协作 :通过依赖管理文件(如
requirements.txt
或environment.yml
),方便团队协作和项目部署。
2. 常用工具
venv
(Python 3.3+ 内置,轻量级虚拟环境工具)virtualenv
(第三方工具,支持 Python 2 和 Python 3)pipenv
(结合虚拟环境和依赖管理,适合小型项目)poetry
(现代依赖管理和虚拟环境工具,适合复杂项目)conda
(强大的跨平台环境管理工具,适合科学计算和机器学习)
3. 创建虚拟环境
3.1 使用 venv
bash
# 创建虚拟环境(需已安装对应 Python 版本)
python -m venv myenv
# 激活虚拟环境
# Windows
myenv\Scripts\activate
# macOS/Linux
source myenv/bin/activate
# 退出虚拟环境
deactivate
3.2 使用 conda
bash
# 创建虚拟环境(可指定 Python 版本)
conda create --name myenv python=3.9
# 激活虚拟环境
conda activate myenv
# 退出虚拟环境
conda deactivate
4. 依赖管理
4.1 使用 venv
和 pip
bash
# 安装包
pip install numpy
# 导出依赖
pip freeze > requirements.txt
# 根据依赖文件安装
pip install -r requirements.txt
4.2 使用 conda
和 environment.yml
yaml
# environment.yml 示例
name: myenv
channels:
- conda-forge
- defaults
dependencies:
- python=3.9
- numpy
- pandas
bash
# 根据 YAML 文件创建环境
conda env create -f environment.yml
# 导出环境配置
conda env export > environment.yml
5. 工具对比
5.1 venv
- 优点 :
- 轻量,无需额外安装(Python 3.3+ 内置)。
- 适合简单 Python 项目,与 PyPI 完全兼容。
- 缺点 :
- 无法管理非 Python 依赖或不同 Python 版本。
- 依赖冲突需手动解决。
5.2 conda
- 优点 :
- 强大的依赖解析能力。
- 支持多语言包和 Python 版本隔离。
- 适合科学计算(如 TensorFlow、PyTorch 的预编译包)。
- 缺点 :
- 环境文件(
environment.yml
)可能跨平台不兼容。 - 包体积较大(含预编译二进制文件)。
- 环境文件(
6. 使用场景建议
-
选择
venv
:- 项目仅需 Python 包。
- 使用 PyPI 标准库(如 Web 开发、脚本工具)。
- 希望环境与项目目录绑定(便于版本控制)。
-
选择
conda
:- 涉及科学计算、机器学习(需 CUDA、MKL 等非 Python 依赖)。
- 需要隔离不同 Python 版本(如测试兼容性)。
- 跨平台团队协作(统一依赖管理)。
7. 常见问题
Q1: conda
和 venv
能混用吗?
- 不推荐 :避免在
conda
环境中使用pip
安装核心包(可能导致依赖冲突)。若需混用,优先使用conda install
,再用pip
补充 PyPI 包。
Q2: 如何删除虚拟环境?
venv
:直接删除环境目录(如rm -rf myenv
)。conda
:conda env remove --name myenv
。
Q3: conda
环境文件跨平台问题?
- 使用
conda env export --no-builds
导出时忽略系统相关的构建号,提高跨平台兼容性。
8. 总结
venv
:轻量、简单,适合纯 Python 项目。conda
:功能强大,适合复杂依赖和科学计算。
根据项目需求选择合适的工具,两者结合使用(如 conda
管理 Python 版本,venv
隔离项目依赖)也是常见做法。
9. 最佳实践
- 项目目录绑定:将虚拟环境放在项目目录中,便于版本控制和团队协作。
- 依赖文件管理 :始终使用
requirements.txt
或environment.yml
记录依赖,确保环境可复现。 - 定期清理:删除不再使用的虚拟环境,避免占用磁盘空间。