uv 是一个用 Rust 编写的极快的 Python 包和项目管理器,由 Astral 团队开发(同样开发了 Ruff)。它旨在替代 pip、pip-tools、poetry、pyenv 等工具,提供统一且高性能的解决方案。curl -LsSf https://astral.sh/uv/install.sh | shpowershell -c "irm https://astral.sh/uv/install.ps1 | iex"pip install uv功能 | 命令 | 说明 |
|---|---|---|
初始化项目 |
| 创建项目结构,生成 |
添加依赖 |
| 安装包并更新锁文件 |
开发依赖 |
| 添加开发环境依赖 |
同步环境 |
| 根据锁文件安装/更新所有依赖 |
运行脚本 |
| 在临时或现有虚拟环境中运行代码 |
管理 Python |
| 自动下载并管理特定 Python 版本 |
Pip 兼容模式 |
| 像 pip 一样使用(用于旧项目) |
显示树 |
| 查看依赖树 |
# 1. 创建新项目uv init my_projectcd my_project# 2. 添加依赖uv add flask# 3. 运行代码(自动创建/激活虚拟环境)uv run python app.py# 4. 部署/同步uv sync
uv 与 pip 的深度对比特性 |
|
|
|---|---|---|
语言 | Python | Rust |
速度 | 较慢(尤其是解析依赖时) | 极快 (10-100x) |
定位 | 包安装器 | 项目 + 包 + 环境 + Python 版本管理器 |
虚拟环境 | 需配合 | 内置自动管理 ( |
依赖锁定 | 需配合 | 内置锁文件 ( |
Python 版本 | 无法管理 (需 | 内置管理 ( |
配置文件 |
|
|
兼容性 | 官方标准 | 兼容 |
成熟度 | 非常成熟 (十年 +) | 较新 (但迭代极快,已稳定) |
pip 换成 uv 吗?uv 能节省大量等待时间。pyenv、virtualenv、poetry,一个 uv 搞定所有。uv 推动使用 pyproject.toml 这一 Python 官方标准,而不是 setup.py 或单纯的 requirements.txt。模式 A:完全项目化管理(推荐用于新项目)不再使用 pip install,而是使用 uv 的原生命令。
pip install requestsuv add requestspython main.pyuv run main.py模式 B:Pip 兼容模式(推荐用于旧项目迁移)保留 requirements.txt 工作流,仅替换底层引擎。
uv pip install -r requirements.txtalias pip=uv (在 shell 配置中)pip:pip。强制替换系统 pip 可能导致系统工具损坏。uv,或者在 CI/CD 和 Docker 环境中优先使用 uv。pyproject.toml 支持:uv 鼓励使用 pyproject.toml 管理依赖。如果你的老项目只有 requirements.txt,可以使用 uv pip 模式,或者逐步迁移到 uv init 管理的项目结构。uv 对大多数 PyPI 包支持良好。如果你的公司使用复杂的私有源、需要特殊的 setup.py 逻辑构建包,建议先在小范围测试兼容性(虽然 uv 兼容性已经非常高)。uv,需要确保所有成员的 uv 版本一致(或锁文件兼容),并提交 uv.lock 文件到 Git。场景 | 建议 |
|---|---|
全新 Python 项目 | 强烈推荐使用 |
现有项目 (CI/CD) | 推荐替换。在 Dockerfile 或 GitHub Actions 中使用 |
现有项目 (本地开发) | 推荐尝试。使用 |
系统环境 | 不要替换。保留系统 |
复杂构建包 | 谨慎。如果包依赖复杂的 |
# 安装单个包uv pip install requests# 安装多个包uv pip install requests pandas numpy# 从 requirements.txt 安装uv pip install -r requirements.txt# 安装特定版本uv pip install "django>=4.0,<5.0"
uv pip uninstall requestsuv pip listuv pip freeze
# 创建虚拟环境uv venv# 指定 Python 版本uv venv --python 3.11# 指定虚拟环境路径uv venv .venv
# Linux/macOSsource .venv/bin/activate# Windows.venv\Scripts\activate
# 创建新项目uv init my-projectcd my-project# 项目结构# my-project/# ├── pyproject.toml# ├── README.md# └── src/
# 添加依赖到项目uv add requests# 添加开发依赖uv add --dev pytest# 添加特定版本uv add "fastapi>=0.100.0"
uv remove requests# 运行 Python 脚本uv run python script.py# 运行命令uv run pytest
# 根据 pyproject.toml 同步依赖uv sync
# 列出可用的 Python 版本uv python list# 安装特定 Python 版本uv python install 3.11# 查看已安装的 Python 版本uv python list --only-installed
# 生成锁文件uv lock# 更新锁文件uv lock --upgrade# 更新特定包uv lock --upgrade-package requests
| 17x | |||
| 16x | |||
| 15x |
# 包管理uv pip install <package> # 安装包uv pip uninstall <package> # 卸载包uv pip list # 列出包uv pip freeze # 导出依赖# 虚拟环境uv venv # 创建虚拟环境uv venv --python 3.11 # 指定 Python 版本# 项目管理uv init <project> # 初始化项目uv add <package> # 添加依赖uv remove <package> # 移除依赖uv sync # 同步依赖uv run <command> # 运行命令uv lock # 生成锁文件# Python 版本uv python list # 列出 Python 版本uv python install 3.11 # 安装 Python 版本
# 替换命令即可pip install requests → uv pip install requestspip freeze → uv pip freeze
# Pipfile → pyproject.toml# 需要手动转换配置文件
| 速度 | 10-100倍 | ||
| 依赖解析 | 快速且完整 | ||
| 缓存机制 | 全局智能缓存 | ||
| 虚拟环境 | 内置支持 | ||
| 锁文件 | 原生支持 | ||
| Python 版本管理 | ✅ | ||
| 项目管理 | ✅ | ||
| 兼容性 | 完全兼容 pip | ||
| 安装依赖 | 无需 Python |
# 安装包pip install requests → uv pip install requestspip install -r requirements.txt → uv pip install -r requirements.txt# 卸载包pip uninstall requests → uv pip uninstall requests# 列出包pip list → uv pip listpip freeze → uv pip freezepip freeze > requirements.txt → uv pip freeze > requirements.txt# 显示包信息pip show requests → uv pip show requests# 搜索包(注意:uv 暂不支持 search)pip search package → ❌ uv 不支持# 检查依赖pip check → uv pip check# 安装可编辑模式pip install -e . → uv pip install -e .
pip 改为 uv pip# === 使用 pip ===python -m venv .venvsource .venv/bin/activatepip install requests pandaspython script.py# === 使用 uv(直接替换)===uv venvsource .venv/bin/activateuv pip install requests pandaspython script.py
# === 使用 pip ===pip install -r requirements.txtpip freeze > requirements.txt# === 使用 uv(直接替换)===uv pip install -r requirements.txtuv pip freeze > requirements.txt
# === 使用 pip + pip-tools ===pip install pip-toolsecho "requests" > requirements.inpip-compile requirements.inpip-sync requirements.txt# === 使用 uv(更简单)===uv inituv add requestsuv sync
pip search package # uv 不支持(PyPI 已禁用此 API)pip download requests --dest ./packages/# uv 暂无直接等价命令
pip wheel requests# uv 暂不支持构建 wheel
pip install --user requests# uv 不支持用户级安装(推荐使用虚拟环境)
pip install → uv pip installpip install -r requirements.txt → uv pip install -r requirements.txtpip uninstall → uv pip uninstallpip freeze → uv pip freezepip list → uv pip listpip search - uv 不支持pip download - 需要其他方案pip wheel - uv 暂不支持