uv 是一个基于 Rust 的高速、统一的 Python 包和项目管理器,旨在取代 pip、pip-tools、virtualenv 和 pyenv 等多个工具的功能。
uv 简化操作指南
I. 基础命令
| 任务 | 命令 | 说明 |
|---|---|---|
| 自升级 uv | uv self update |
如果是通过独立安装程序安装的,使用此命令更新 uv。 |
| 检查版本 | uv --version |
验证安装是否成功。 |
II. 项目初始化与依赖管理
uv 的核心工作流程围绕 pyproject.toml 文件(用于声明抽象依赖)和 uv.lock 文件(用于锁定精确版本,确保环境可重现)展开。
| 命令 | 用途 | 示例 |
|---|---|---|
| 初始化项目 | 创建新的 uv 项目结构 (pyproject.toml, .gitignore, .venv 虚拟环境,以及 .python-version 文件)。 |
uv init my_app |
| 添加依赖 | 安装包并自动更新 pyproject.toml 和 uv.lock。 |
uv add requests |
| 添加开发依赖 | 将依赖添加到 [dependency-groups].dev 部分。 |
uv add --dev pytest |
从 requirements.txt 添加 |
导入现有的依赖文件到 pyproject.toml。 |
uv add -r requirements.txt |
| 锁定依赖 | 根据 pyproject.toml 解析并生成/更新 uv.lock 文件。 |
uv lock |
| 同步环境 | 根据 uv.lock 文件的精确版本 安装/卸载包,确保环境完全可重现。 |
uv sync |
| 移除依赖 | 卸载包,并自动移除所有不再需要的传递性依赖。 | uv remove pandas |
| 升级指定包 | 升级指定的包到最新兼容版本,并更新锁定文件。 | uv lock --upgrade-package flask |
III. 环境和 Python 版本管理
uv 集成了虚拟环境 (virtualenv) 和 Python 版本管理 (pyenv) 的功能。
| 命令 | 用途 | 示例 |
|---|---|---|
| 创建虚拟环境 | 在当前目录创建 .venv 虚拟环境。 |
uv venv |
| 指定版本创建环境 | 创建环境并指定 Python 解释器版本 (如果本地没有,uv 会下载安装)。 | uv venv --python 3.11 |
| 安装 Python 版本 | 安装特定 Python 解释器。 | uv python install 3.12 |
| 固定项目版本 | 创建 .python-version 文件,将项目使用的 Python 版本固定下来。 |
uv python pin 3.11 |
IV. 运行脚本和工具
uv 提供隔离的环境来运行脚本和命令行工具,类似于 pipx 的功能。
| 命令 | 用途 | 示例 |
|---|---|---|
| 运行项目命令/脚本 | 在当前项目的虚拟环境 (.venv) 中运行任意命令或脚本。 |
uv run pytest tests/ |
| 运行独立脚本 | 运行带有内联依赖元数据(PEP 723)的 Python 脚本。 | uv run script.py |
| 临时运行 CLI 工具 | uv tool run 的别名,在一次性、短暂的缓存环境中安装并运行工具。 |
uvx black main.py |
| 全局安装工具 | 将工具安装到隔离的专用环境中。 | uv tool install ruff |
V. Pip 兼容模式 (uv pip)
uv 提供了 uv pip 接口,作为传统 pip 和 pip-tools 命令的高速替代品,但不推荐用于项目管理 (因为它不会自动更新 pyproject.toml 或 uv.lock)。
| 任务 | uv 兼容命令 | 传统命令 |
|---|---|---|
| 安装依赖文件 | uv pip install -r requirements.txt |
pip install -r requirements.txt |
| 编译锁定文件 | uv pip compile requirements.in |
pip-compile requirements.in |
| 同步锁定文件 | uv pip sync requirements.txt |
pip-sync requirements.txt |
| 列出已安装包 | uv pip list / uv pip freeze |
pip list / pip freeze |