uv 是一个由 Astral 团队开发的高性能 Python 包和项目管理工具。Astral 团队也是广受欢迎的 Ruff(一个极速的 Python linter)的开发者。uv 的目标是成为 Python 生态中的“一站式”工具,取代传统的工具链(如 pip
、pip-tools
、virtualenv
、poetry
等),同时提供更快的速度和更强大的功能。
uv 的核心优势在于其极快的速度和多功能性。它基于 Rust 编写,充分利用了 Rust 的高性能和安全性,使其在依赖解析、包安装和项目管理等方面比传统工具快 10 到 100 倍。
uv 的主要功能
- 极速包管理:
- 替代
pip
,提供更快的依赖安装和解析。 - 支持创建和管理虚拟环境。
- 替代
- 依赖管理:
- 支持
requirements.txt
和pyproject.toml
。 - 提供类似
poetry
的依赖锁定功能,生成统一的锁文件。
- 支持
- 脚本运行:
- 支持通过
uv run
直接运行 Python 脚本,并自动处理脚本的依赖。
- 支持通过
- Python 版本管理:
- 支持安装和管理多个 Python 版本(类似
pyenv
)。
- 支持安装和管理多个 Python 版本(类似
- 项目初始化:
- 提供
uv init
命令,快速初始化 Python 项目。
- 提供
- 跨平台支持:
- 支持 macOS、Linux 和 Windows。
安装 uv
uv 可以通过以下方式安装:
1. 使用 curl
安装
curl -LsSf https://astral.sh/uv/install.sh | sh
安装完成后,重启终端或运行 source ~/.bashrc
(或 source ~/.zshrc
)以使 uv
生效。
2. 使用 pip
安装
pip install uv
使用 uv
1. 创建虚拟环境
uv 可以快速创建虚拟环境:
uv venv myenv
这会在当前目录下创建一个名为 myenv
的虚拟环境。
激活虚拟环境:
- 在 macOS/Linux 上:
source myenv/bin/activate
- 在 Windows 上:
myenv\Scripts\activate
2. 安装依赖
uv 可以替代 pip
安装依赖:
uv pip install requests
你也可以从 requirements.txt
安装依赖:
uv pip install -r requirements.txt
3. 依赖锁定
uv 支持生成锁文件(类似 poetry
):
uv pip compile requirements.in -o requirements.txt
这会生成一个锁定的 requirements.txt
文件,确保依赖版本的一致性。
4. 运行脚本
uv 可以直接运行 Python 脚本,并自动处理脚本的依赖:
uv run script.py
5. 管理 Python 版本
uv 支持安装和管理多个 Python 版本:
uv python install 3.10
切换 Python 版本:
uv python use 3.10
6. 初始化项目
使用 uv init
快速初始化一个 Python 项目:
uv init myproject
这会创建一个包含 pyproject.toml
和虚拟环境的项目目录。
uv 的优势
- 极速:
- 基于 Rust 实现,依赖解析和包安装速度远超传统工具。
- 多功能:
- 集成了包管理、虚拟环境管理、脚本运行和 Python 版本管理等功能。
- 兼容性:
- 兼容现有的 Python 工具链(如
pip
、requirements.txt
和pyproject.toml
)。
- 兼容现有的 Python 工具链(如
- 社区驱动:
- 由 Astral 团队开发,背后有一个活跃的社区支持。
uv 的适用场景
- 需要快速安装和管理依赖的开发者。
- 希望简化 Python 工具链的用户。
- 需要高性能依赖解析和包安装的大型项目。
- 需要跨平台支持的项目。
示例:使用 uv 管理一个项目
- 初始化项目:
uv init myproject cd myproject
- 安装依赖:
uv pip install flask
- 生成锁文件:
uv pip compile pyproject.toml -o requirements.txt
- 运行脚本:
uv run app.py
总结
uv 是一个革命性的 Python 工具,旨在简化并加速 Python 项目的依赖管理和开发流程。它结合了高性能、多功能性和易用性,是 Python 开发者值得尝试的新工具。如果你对现有的工具链感到不满,或者希望提升开发效率,uv 是一个绝佳的选择。