跳转至

Python 包管理工具深度调研:uv vs pip vs conda

一、工具概述

1.1 pip

pip 是 Python 官方标准包管理工具,随 Python 3.4+ 版本默认预装。它专注于 Python 包的安装与管理,从 PyPI(Python Package Index)下载包,仅处理 Python 层面的依赖关系。pip 本身不提供环境隔离能力,需配合 venv/virtualenv 使用。

1.2 conda

conda 是由 Anaconda 公司开发的跨语言包与环境一体化管理工具,最初为数据科学场景设计。它不仅管理 Python 包,还能管理 C/C++、CUDA 等系统级二进制依赖,内置虚拟环境功能。conda 有两个发行版:完整版 Anaconda(预装大量科学计算包,体积大)和轻量版 Miniconda(仅含基础时,按需安装)。

1.3 uv

uv 是 Astral 公司(Ruff 作者团队)用 Rust 语言重写的下一代 Python 工具链,定位为 "极速一体化 Python 开发环境"。它集包安装、依赖解析、虚拟环境管理、Python 版本管理于一身,速度比 pip 快 10-100 倍,完全兼容 pip 接口与 pyproject.toml 标准,是当前 Python 社区最受关注的新星工具。


二、核心维度对比

对比维度 uv pip conda
底层语言 Rust Python Python + C++
开发者 Astral Python 官方 Anaconda Inc.
安装速度 极快(pip 的 10-100 倍) 较慢 中等(二进制包快,依赖解析慢)
依赖解析 智能高效,内置全局缓存 简单,易出现依赖冲突 严格完整,但大环境下解析极慢
虚拟环境 内置,自动创建,轻量化 需搭配 venv/virtualenv 内置,功能强但环境臃肿
Python 版本管理 内置,自动下载切换 不支持,需 pyenv 内置
锁文件 原生支持 uv.lock 无原生锁文件 无原生锁文件
包来源 PyPI 为主 PyPI 为主 conda-forge、defaults 等频道
非 Python 依赖 不支持 不支持 支持(CUDA、C++ 库等)
跨语言 仅 Python 仅 Python 多语言(Python/R/C++ 等)
磁盘占用 极小(全局缓存去重) 中等(各环境独立安装) 较大
生态成熟度 快速崛起中 最成熟,事实标准 数据科学领域成熟
企业级容器镜像 极小(<200MB) 中等 大(通常 >1GB)

三、pip 详细使用教程

3.1 安装与检查

Python 3.4+ 默认自带 pip,检查版本:

Bash
1
2
3
pip --version
# 或推荐的模块调用方式(避免多版本混乱)
python -m pip --version

若未安装,可通过 ensurepip 修复:

Bash
1
python -m ensurepip --upgrade

升级 pip 自身:

Bash
1
python -m pip install --upgrade pip

3.2 基础包管理命令

安装包

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 安装最新版
pip install requests

# 安装指定版本
pip install requests==2.31.0

# 版本范围
pip install "requests>=2.28.0,<3.0.0"

# 安装可选依赖
pip install "fastapi[all]"

# 升级到最新版
pip install --upgrade requests
# 简写
pip install -U requests

卸载包

Bash
1
2
3
pip uninstall requests
# 自动确认无需交互
pip uninstall -y requests

查询包信息

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 列出所有已安装包
pip list

# 列出可升级的包
pip list --outdated

# 查看包详细信息
pip show requests

# 检查依赖冲突
pip check

3.3 批量管理:requirements.txt

导出当前环境依赖

Bash
1
pip freeze > requirements.txt

从文件批量安装

Bash
1
pip install -r requirements.txt

requirements.txt 写法示例

Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 精确版本(生产环境推荐)
requests==2.31.0
flask==3.0.0

# 宽松版本(开发环境)
numpy>=1.24.0
pandas~=2.1.0  # 兼容补丁版本更新

# 从 Git 安装
git+https://github.com/psf/requests.git@v2.31.0

# 本地 wheel 文件
./packages/some_lib-1.0.0-py3-none-any.whl

3.4 虚拟环境(venv)

pip 本身不隔离环境,需配合 Python 内置的 venv 模块:

Bash
1
2
# 创建虚拟环境(项目目录下)
python -m venv .venv

激活环境

Bash
1
2
3
4
5
6
7
8
# macOS / Linux
source .venv/bin/activate

# Windows CMD
.venv\Scripts\activate.bat

# Windows PowerShell
.\.venv\Scripts\Activate.ps1

激活后终端前缀会显示 (.venv),此时所有 pip 操作仅作用于当前环境。

退出与删除

Bash
1
2
3
4
5
6
# 退出环境
deactivate

# 删除环境(直接删目录即可)
rm -rf .venv  # Linux/macOS
rmdir /s .venv  # Windows

3.5 国内镜像源加速

临时使用:

Bash
1
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

永久配置:

Bash
1
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

3.6 pip 最佳实践

  • 每个项目使用独立虚拟环境,避免全局污染
  • 生产环境使用 == 锁定精确版本
  • 区分开发依赖与生产依赖(可用两个 requirements 文件)
  • 优先使用 python -m pip 调用,避免多 Python 版本混淆
  • 提交代码时不要提交 .venv 目录

四、conda 详细使用教程

4.1 安装

推荐安装 Miniconda(轻量版,约 80MB):

验证安装:

Bash
1
conda --version

4.2 环境管理核心命令

创建环境

Bash
1
2
3
4
5
6
7
# 创建指定 Python 版本的环境
conda create --name myenv python=3.11

# 创建并同时安装包
conda create -n ml-env python=3.10 numpy pandas matplotlib

# 简写 -n 等同于 --name

激活与退出

Bash
1
2
3
4
5
# 激活环境
conda activate myenv

# 退出当前环境
conda deactivate

环境列表与删除

Bash
1
2
3
4
5
6
7
8
# 查看所有环境
conda env list
conda info --envs

# 删除环境
conda remove --name myenv --all
# 或
conda env remove -n myenv

克隆环境

Bash
1
conda create --name new_env --clone old_env

4.3 包管理命令

安装包

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 当前环境安装
conda install numpy

# 指定环境安装
conda install -n myenv numpy

# 安装指定版本
conda install numpy=1.24.0

# 从指定频道安装(conda-forge 社区源)
conda install -c conda-forge pytorch

# 同时安装多个包
conda install numpy pandas scikit-learn

# 静默安装(自动确认)
conda install numpy -y

更新与卸载

Bash
1
2
3
4
5
6
7
8
# 更新单个包
conda update numpy

# 更新当前环境所有包
conda update --all

# 卸载包
conda remove numpy

查询包

Bash
1
2
3
4
5
# 列出当前环境的包
conda list

# 搜索可用包
conda search tensorflow

4.4 环境配置文件:environment.yml

conda 使用 YAML 文件管理环境配置,支持团队协作与复现。

导出环境

Bash
1
2
3
4
5
6
7
8
# 完整导出(含所有依赖和构建号,与平台绑定)
conda env export > environment.yml

# 精简版(不含构建号,跨平台兼容性好)
conda env export --no-builds > environment.yml

# 仅导出手动安装的包(最精简,推荐提交到 Git)
conda env export --from-history > environment.yml

从文件创建环境

Bash
1
conda env create -f environment.yml

更新已有环境

Bash
1
2
conda env update -f environment.yml --prune
# --prune 会移除不再需要的依赖

environment.yml 模板

YAML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
name: ml-project
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.10
  - numpy=1.24
  - pandas=2.1
  - pytorch=2.0
  - pip:
    - some-pip-only-package==1.0.0

4.5 频道(Channels)配置

conda 包来自不同频道,常用频道:

  • defaults:Anaconda 官方默认频道
  • conda-forge:社区维护,包最全更新最快
  • bioconda:生物信息学专用
  • pytorch:PyTorch 官方频道

添加国内镜像源

Bash
1
2
3
4
5
6
7
8
9
# 添加清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge

# 搜索时显示频道来源
conda config --set show_channel_urls yes

# 查看当前配置
conda config --show-sources

4.6 conda 最佳实践

  • 优先使用 Miniconda 而非完整版 Anaconda
  • 一个项目一个环境,环境名与项目对应
  • 创建环境时一次性指定所有包,依赖解析效果最佳
  • 使用 --from-history 导出精简配置用于版本控制
  • 数据科学 / GPU 场景优先 conda,普通 Web 项目可考虑更轻量的方案
  • conda 与 pip 混用需谨慎:先 conda 装,后 pip 装,尽量减少混用

五、uv 详细使用教程

uv 提供两种使用模式:pip 兼容模式(快速替换现有 pip 工作流)和 项目管理模式(一体化现代工作流,对标 Poetry)。

5.1 安装 uv

官方推荐方式(跨平台)

Bash
1
2
3
4
5
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows PowerShell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

其他安装方式

Bash
1
2
3
4
5
6
7
8
# 通过 pip 安装(不推荐生产环境)
pip install uv

# Homebrew
brew install uv

# Winget (Windows)
winget install uv

验证安装:

Bash
1
uv --version

自我更新:

Bash
1
uv self update

5.2 模式一:pip 兼容模式

直接在原有 pip 命令前加 uv 即可获得极速体验,零学习成本迁移。

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 安装包
uv pip install requests
uv pip install requests==2.31.0

# 从 requirements.txt 安装
uv pip install -r requirements.txt

# 卸载
uv pip uninstall requests

# 列出已安装包
uv pip list

# 导出依赖
uv pip freeze > requirements.txt

# 升级包
uv pip install --upgrade requests

配合虚拟环境使用

Bash
1
2
3
4
5
6
7
8
# 创建虚拟环境
uv venv

# 激活(与 venv 完全一致)
source .venv/bin/activate  # macOS/Linux
.venv\Scripts\activate     # Windows

# 激活后 uv pip 自动使用当前环境

5.3 模式二:项目管理模式(推荐)

这是 uv 最强大的工作流,一体化管理项目依赖、虚拟环境、Python 版本。

5.3.1 初始化项目

Bash
1
2
3
4
5
6
# 新建项目
uv init my-project
cd my-project

# 在当前空目录初始化
uv init

自动生成项目结构:

Text Only
1
2
3
4
5
my-project/
├── .python-version    # 项目 Python 版本声明
├── pyproject.toml     # 项目元数据与依赖声明
├── README.md
└── main.py            # 示例入口

首次 uv runuv sync 时,uv 会自动:

  1. 下载匹配版本的 Python 解释器(如未安装)
  2. 创建 .venv 虚拟环境
  3. 解析依赖生成 uv.lock 锁文件
  4. 安装所有依赖

5.3.2 依赖管理

添加依赖

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 添加生产依赖
uv add requests

# 添加指定版本
uv add "requests>=2.31.0"

# 添加开发依赖
uv add --dev pytest black

# 从 requirements.txt 批量导入
uv add -r requirements.txt

# 添加 Git 依赖
uv add git+https://github.com/psf/requests.git

移除依赖

Bash
1
uv remove requests

更新依赖

Bash
1
2
3
4
5
# 更新所有依赖到最新兼容版本
uv lock --upgrade

# 更新指定包
uv lock --upgrade-package requests

5.3.3 锁定与同步

Bash
1
2
3
4
5
6
7
8
# 生成/更新锁文件 uv.lock
uv lock

# 根据锁文件同步安装到虚拟环境
uv sync

# 仅同步生产依赖(不含开发依赖)
uv sync --no-dev

uv 默认自动锁定与同步:执行 uv run 时会自动检查锁文件和环境状态,确保一致。

5.3.4 命令

Bash
1
2
3
4
5
6
7
8
# 脚本(自动使用项目虚拟环境)
uv run python main.py

# 模块
uv run -m pytest

#  pyproject.toml 中定义的脚本
uv run start

5.4 Python 版本管理

uv 内置 Python 版本管理,无需 pyenv:

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 查看已安装的 Python 版本
uv python list

# 安装指定版本
uv python install 3.12
uv python install 3.10.12

# 项目指定 Python 版本
uv python pin 3.11
# 这会更新 .python-version 文件

# 卸载版本
uv python uninstall 3.9

5.5 uv 高级特性

全局缓存去重

uv 采用内容寻址全局缓存,所有虚拟环境共享同一份包文件,大幅节省磁盘空间。

工作区(Workspaces)

支持 monorepo 多包项目管理,类似 Cargo workspaces。

镜像源配置

TOML
1
2
3
4
5
6
# 临时使用
uv pip install requests --index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 配置文件方式(pyproject.toml)
[tool.uv]
index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"

5.6 uv 最佳实践

  • 新项目直接使用 uv 项目管理模式(uv init
  • 旧项目可先用 uv pip install -r requirements.txt 无痛提速
  • 提交 uv.lock 到版本控制,确保团队环境一致
  • 利用 uv run 执行所有命令,无需手动激活环境
  • CI/CD 中使用 --frozen 模式确保锁文件不被修改:uv sync --frozen

六、选型决策指南

6.1 什么时候用 uv ✅

  • 普通 Web 开发、API 服务、CLI 工具、Agent 应用
  • 追求极致安装速度,讨厌等待依赖解析
  • 希望一个工具搞定 Python 版本、虚拟环境、包管理
  • 容器化部署,追求镜像体积小、启动快
  • 新项目、现代化 Python 工程
  • 从 pip/Poetry 迁移,希望获得数量级性能提升

6.2 什么时候用 conda ✅

  • 数据科学、机器学习、深度学习项目(PyTorch/TensorFlow)
  • 需要管理 CUDA、cuDNN 等非 Python 系统依赖
  • 生物信息学、科学计算等有大量 C/C++ 扩展的领域
  • 团队已深度绑定 Anaconda 生态
  • 需要 R、Julia 等多语言混合环境

6.3 什么时候用 pip ✅

  • 简单脚本、临时原型、快速试验
  • 受限环境无法安装额外工具(服务器默认环境)
  • 维护老旧项目,无需现代化特性
  • 极致简单,不想引入新工具学习成本

6.4 组合使用方案

uv + conda 混合方案(AI 项目推荐):

  • 用 conda 管理 Python 基础环境和 CUDA 系统依赖
  • 用 uv 在 conda 环境内安装 PyPI 包,获得极速体验
Bash
1
2
3
conda create -n ai-env python=3.10 cudatoolkit=11.8
conda activate ai-env
uv pip install torch transformers datasets

七、迁移指南

7.1 pip → uv 迁移

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 1. 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 2. 快速替换(零改动)
uv pip install -r requirements.txt

# 3. 进阶:转为 uv 项目管理模式
uv init
uv add -r requirements.txt
uv sync

7.2 conda → uv 迁移

仅当项目不依赖 conda 专属二进制包时适用:

Bash
1
2
3
4
5
# 导出 conda 环境中的 pip 部分
conda list --export > conda_pkgs.txt

# 提取纯 Python 包,用 uv 安装
uv pip install -r conda_pkgs.txt

八、总结

表格

工具 定位 速度 上手难度 推荐指数
uv 现代化一体化工具链 ⚡ 极快 中等 ⭐⭐⭐⭐⭐(新项目首选)
pip 标准包安装器 🐢 较慢 简单 ⭐⭐⭐(兼容与简单场景)
conda 跨语言环境管理器 🐌 中等偏慢 中等 ⭐⭐⭐⭐(数据科学 / GPU)

核心结论:对于绝大多数普通 Python 项目,uv 是当前综合体验最优的选择 —— 它在保持生态兼容性的同时,提供了数量级的性能提升和更现代化的工作流。conda 在数据科学与 GPU 场景仍有不可替代性,而 pip 则作为事实标准继续发挥基础作用。