在 Python 开发中,主要有三种创建虚拟环境的方式,它们各有特点和适用场景。下面为你详细介绍每种方式:
1. conda
Conda 是一个跨平台的包管理器和环境管理器,由 Anaconda 发行版引入。
特点:
- 不仅仅是 Python:可以管理其他语言和工具的依赖
- 预编译包:许多科学计算包有预编译版本,安装速度快
- 环境隔离彻底:包括系统库级别的隔离
安装:
# 安装 Miniconda(轻量版)或 Anaconda(完整版)
# 下载地址:https://docs.conda.io/en/latest/miniconda.html
使用方法:
# 创建环境(默认使用 conda 源)
conda create -n myenv python=3.9
# 创建环境并指定包
conda create -n myenv python=3.9 numpy pandas
# 激活环境
conda activate myenv # Windows/Linux/macOS
# 退出环境
conda deactivate
# 列出所有环境
conda env list
# 删除环境
conda remove -n myenv --all
# 导出环境配置
conda env export > environment.yml
# 从配置创建环境
conda env create -f environment.yml
优点:
- 处理复杂依赖关系能力强
- 支持非 Python 包(如 R、C++库)
- 二进制包安装,减少编译问题
- 跨平台一致性较好
缺点:
- 环境体积较大
- 社区版可能有些包更新不及时
2. pyenv + pyenv-virtualenv
这是两个工具的组合:
- pyenv:管理多个 Python 版本
- pyenv-virtualenv:为不同项目创建虚拟环境
安装:
# macOS
brew install pyenv pyenv-virtualenv
# Linux
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
配置 Shell(~/.bashrc 或 ~/.zshrc):
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
使用方法:
# 安装指定 Python 版本
pyenv install 3.9.13
# 列出已安装版本
pyenv versions
# 创建虚拟环境(基于特定 Python 版本)
pyenv virtualenv 3.9.13 myproject-3.9
# 激活环境
pyenv activate myproject-3.9
# 退出环境
pyenv deactivate
# 设置项目本地环境(进入目录自动激活)
cd myproject
pyenv local myproject-3.9
# 删除环境
pyenv uninstall myproject-3.9
优点:
- 完美解决多版本 Python 共存问题
- 项目级自动激活很方便
- 轻量级,只管理 Python 环境
缺点:
- 需要额外配置
- 只管理 Python,不处理其他依赖
3. venv(Python 内置)
Python 3.3+ 内置的虚拟环境工具,无需额外安装。
特点:
- 标准库自带:无需额外安装
- 轻量简单:功能专一
- Python 官方推荐
使用方法:
# 创建虚拟环境
python -m venv myenv
# 或指定 Python 版本
python3.9 -m venv myenv
# 激活环境
# Windows:
myenv\Scripts\activate
# Linux/macOS:
source myenv/bin/activate
# 退出环境
deactivate
# 创建带系统 site-packages 的环境(可访问系统包)
python -m venv --system-site-packages myenv
# 升级 pip 等工具
python -m venv --upgrade myenv
文件结构:
myenv/
├── bin/ (或 Scripts/ 在 Windows)
│ ├── activate
│ ├── pip
│ ├── python
│ └── ...
├── lib/
│ └── python3.9/site-packages/
└── pyvenv.cfg
优点:
- 无需安装,Python 自带
- 简单易用,学习成本低
- 官方维护,兼容性好
缺点:
- 不能管理 Python 版本本身
- 功能相对简单
其他插件/工具
virtualenv(第三方,venv 的前身)
# 安装
pip install virtualenv
# 使用
virtualenv myenv
source myenv/bin/activate
pipenv
结合了 pip 和虚拟环境管理
# 安装
pip install pipenv
# 使用
cd myproject
pipenv --python 3.9 # 创建环境
pipenv install requests # 安装包
pipenv shell # 激活环境
pipenv lock # 生成锁文件
Poetry
现代 Python 包管理和依赖管理
# 安装
pip install poetry
# 使用
poetry new myproject # 创建新项目
poetry install # 安装依赖
poetry add requests # 添加包
poetry shell # 激活环境
对比与选择建议
| 工具 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| conda | 数据科学、机器学习、需要非Python依赖 | 依赖管理强大,预编译包多 | 体积大,有些包更新慢 |
| pyenv+virtualenv | 多版本Python开发,项目隔离 | Python版本管理优秀,轻量 | 需要配置,只管理Python |
| venv | 简单Python项目,标准开发 | 内置无需安装,简单直接 | 不能管理Python版本 |
| pipenv/Poetry | 现代化项目管理,依赖锁定 | 依赖管理先进,整合性好 | 学习曲线稍陡 |
推荐选择:
- 初学者/简单项目:使用
venv,简单够用 - 数据科学/AI项目:使用
conda,依赖管理方便 - Web开发/多版本项目:使用
pyenv + virtualenv或Poetry - 团队协作项目:考虑
Poetry或pipenv,有 lock 文件保证一致性
每种工具都可以配合使用,比如用 pyenv 管理 Python 版本,用 venv 创建虚拟环境。选择最适合你工作流的方式即可。