告别 pip:使用 uv 加速你的 Python 包管理
使用 uv
:更快的 Python 包管理工具
随着 Python 生态的演进,包管理工具也在不断升级迭代。uv
是 Astral(同样维护 ruff
的团队)推出的下一代 Python 包与项目管理器,主打 单一可执行文件、极致性能,可在多数场景下取代 pip
、pip-tools
、pipx
与 virtualenv
等传统工具,并原生支持创建与管理虚拟环境。
安装 uv
macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
安装脚本会将可执行文件放到 ~/.local/bin
(或等效目录),请确认该路径已加入 PATH
。
Windows
irm https://astral.sh/uv/install.ps1 | iex
验证安装
uv --version
常用命令速查
提示
*项目内 如果已通过
uv init
创建项目并生成pyproject.toml
/uv.lock
,推荐使用uv add / uv remove / uv sync
。
*脚本或一次性环境 则直接采用uv pip …
(与pip
参数保持一致)。
场景 | 命令 |
---|---|
安装包(pip 接口) | uv pip install requests (Astral Docs) |
卸载包 | uv pip uninstall requests (Astral Docs) |
添加依赖到项目 | uv add requests (Astral Docs) |
移除依赖 | uv remove requests (Astral Docs) |
同步依赖 / 锁文件 | uv sync (项目) 或 uv pip sync -r requirements.txt (任意环境) (Astral Docs) |
创建虚拟环境 | uv venv .venv uv venv -p 3.10 .venv (Astral Docs) |
运行脚本(替代 pipx run ) | uv run script.py (亦支持 URL) (Astral Docs) |
更新 uv 本身 | uv self update |
无需
source .venv/bin/activate
!
uv
会自动在当前或父级目录搜索并使用.venv
,因此日常开发可直接运行uv run
/uv pip …
。
常见命令详解与用法
uv add
vs uv pip install
的区别
-
uv add requests
:不仅安装包,还会自动将其添加到项目的依赖文件中。如果项目根目录没有 requirements.txt,会自动创建一个。适合项目开发中使用。 -
uv pip install requests
:仅安装包,不更新任何依赖文件。与传统 pip 命令兼容,适合临时使用或快速测试。
导出已安装包到 requirements.txt
# 如果项目已配置 pyproject.toml
uv export > requirements.txt# 如果未配置 pyproject.toml
uv pip freeze > requirements.txt
注意:uv export
依赖于 pyproject.toml 配置,没有此文件时会报错。
使用 uv init
初始化项目
uv init
这个交互式命令会询问基本项目信息,自动生成 pyproject.toml 文件,是小白用户快速入门的最佳选择。生成后,即可使用 uv add
等项目管理命令。
pyproject.toml:现代 Python 项目标准
pyproject.toml 是现代 Python 项目的核心配置文件,用于统一管理:
- 项目元数据(名称、版本、描述)
- 依赖管理(运行时和开发依赖)
- 构建系统配置
- 开发工具设置(linter、formatter)
使用 pyproject.toml 的主要优势是环境一致性和快速配置,让新人加入项目时只需一条命令即可完全重现开发环境。
性能与特性
- 速度:官方基准测试显示,在解析和安装依赖时相较
pip
可提速 10–100×(取决于冷/热缓存与依赖复杂度)。(Astral Docs) - PEP 517/518 完整支持,能构建任意现代 Python 项目。
- 内置 Python 版本管理:
uv python install 3.12
可按需下载独立 Python 发行版,不再依赖系统解释器。(Astral Docs) - 单文件分发:Rust 实现、零运行时依赖,CI/CD 与容器镜像集成简单。
- 丰富子命令:
uv tool
管理 CLI 工具,uv lock
生成可复现锁文件,uv run
支持一次性脚本依赖等。