在 Python 开发中,为每个项目创建独立的虚拟环境是至关重要的最佳实践。这可以防止不同项目间的依赖冲突。本备忘单涵盖了三种主流的环境和包管理工具。
venv+pip: Python 官方标配,轻量级,适用于大多数 Web 和通用项目。Conda: 强大的跨平台环境和包管理器,尤其擅长管理非 Python 依赖(如 CUDA、C++ 库),是数据科学领域的首选。uv: 由rye和ruff的作者开发的下一代 Python 包管理工具,用 Rust 编写,速度极快,旨在成为pip和venv的极速替代品。
1. 安装
| 工具 | 说明 | 安装命令 |
|---|---|---|
pip & venv |
通常随 Python 一起安装,无需额外操作。 | python --version 和 pip --version 检查是否可用。 |
Conda |
推荐安装 Miniconda,它是一个轻量级的 Conda 安装程序。 | 1. 访问 Miniconda 官网 下载对应系统的安装包。 2. 按照图形化或命令行指引完成安装。 |
uv |
一个极速的 Python 包安装器和解析器。 | macOS / Linux:curl -LsSf https://astral.sh/uv/install.sh | shWindows (PowerShell): irm https://astral.sh/uv/install.ps1 | iex |
2. 虚拟环境管理
venv (Python 内置)
| 用途 | 命令 |
|---|---|
| 创建环境 | python -m venv .venv (推荐命名为 .venv) |
| 激活环境 (macOS/Linux) | source .venv/bin/activate |
| 激活环境 (Windows CMD) | .\.venv\Scripts\activate |
| 激活环境 (Windows PowerShell) | .\.venv\Scripts\Activate.ps1 (可能需要先执行 Set-ExecutionPolicy Unrestricted -Scope Process) |
| 退出环境 | deactivate |
Conda
| 用途 | 命令 |
|---|---|
| 创建环境 | conda create --name myenv python=3.11 (创建名为 myenv 的环境,并指定 Python 版本) |
| 激活环境 | conda activate myenv |
| 退出环境 | conda deactivate |
| 查看所有环境 | conda env list 或 conda info --envs |
| 删除环境 | conda env remove --name myenv |
| 克隆环境 | conda create --name newenv --clone oldenv |
uv
uv 将 venv 的创建和激活步骤简化了。
| 用途 | 命令 |
|---|---|
| 创建并激活环境 | uv venv(它会在当前目录创建 .venv 并自动激活。如果 .venv 已存在,则直接激活) |
| 退出环境 | deactivate ( uv 只是封装了 venv,所以退出方式相同) |
3. 包管理 (Package Management)
前提: 在执行以下所有包管理命令前,请务必先激活你的虚拟环境。
pip (在 venv 环境中使用)
| 用途 | 命令 |
|---|---|
| 安装包 | pip install requests |
| 安装特定版本 | pip install requests==2.28.0 |
| 从文件安装 | pip install -r requirements.txt |
| 卸载包 | pip uninstall requests |
| 查看已安装的包 | pip list |
| 生成依赖文件 | pip freeze > requirements.txt (这是最常用的方式,会包含所有包的精确版本) |
| 更新包 | pip install --upgrade requests |
Conda
| 用途 | 命令 |
|---|---|
| 安装包 | conda install numpy |
| 从特定渠道安装 | conda install -c conda-forge matplotlib( conda-forge 是最流行的社区渠道) |
| 安装特定版本 | conda install numpy=1.23.0 |
| 从文件安装 | conda env update --file environment.yml --prune |
| 卸载包 | conda remove numpy |
| 查看已安装的包 | conda list |
| 生成环境文件 | conda env export > environment.yml ( environment.yml 包含了环境名、渠道和所有包,更具可复现性) |
| 更新包 | conda update numpy |
| 更新所有包 | conda update --all |
uv (作为 pip 的高速替代品)
uv 的命令设计与 pip 高度兼容。在已激活的 .venv 环境中,你可以用 uv pip 来代替 pip。
| 用途 | 命令 |
|---|---|
| 安装包 | uv pip install requests(速度通常比 pip 快几个数量级) |
| 从文件安装 | uv pip install -r requirements.txt |
| 卸载包 | uv pip uninstall requests |
| 查看已安装的包 | uv pip list |
| 生成依赖文件 | uv pip freeze > requirements.txt |
| 同步依赖 | uv pip sync requirements.txt(一个强大的命令,它会确保环境中的包严格与文件内容一致,不多也不少) |
4. 常用工作流对比
| 场景 | venv + pip (标准) |
Conda (数据科学) |
venv + uv (现代 & 高效) |
|---|---|---|---|
| 1. 新建项目 | python -m venv .venv |
conda create -n proj_env python=3.11 |
uv venv |
| 2. 激活环境 | source .venv/bin/activate |
conda activate proj_env |
(上一步已自动激活) |
| 3. 安装依赖 | pip install -r requirements.txt |
conda env update -f environment.yml |
uv pip install -r requirements.txt |
| 4. 添加新包 | pip install pandas |
conda install pandas |
uv pip install pandas |
| 5. 保存依赖 | pip freeze > requirements.txt |
conda env export > environment.yml |
uv pip freeze > requirements.txt |
| 6. 离开项目 | deactivate |
conda deactivate |
deactivate |
最佳实践建议:
- 通用/Web 开发:
venv+uv是一个极佳的组合,兼具标准性和极致的速度。 - 数据科学/机器学习:
Conda仍然是首选,因为它能轻松处理复杂的非 Python 依赖。 - 始终使用
.gitignore: 将你的虚拟环境目录 (如.venv/或myenv/) 添加到.gitignore文件中,避免将庞大的环境文件提交到版本控制中。