uv
一个用 Rust 编写的、速度极快的 Python 包管理工具与项目管理器。
使用温热缓存安装 Trio 的依赖项。
主要特点
- 一个工具即可替代
pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv以及更多工具。 - 比
pip快 10-100倍。 - 提供全面的项目管理功能,并配有通用锁文件。
- 能运行脚本,同时支持内联依赖元数据。
- 可以安装并管理不同的 Python 版本。
- 能运行并安装以 Python 包形式发布的工具。
- 拥有与 pip 兼容的接口,在保持熟悉 CLI 的同时提升性能。
- 支持类似 Cargo 的工作区功能,适合大型项目使用。
- 通过全局缓存来去除重复依赖,从而节省磁盘空间。
- 即使没有 Rust 或 Python,也可以通过
curl或pip进行安装。 - 支持 macOS、Linux 和 Windows 系统。
uv 由 Astral 提供支持,该公司也是 Ruff 和 ty 的创建者。
安装
可以使用我们的独立安装程序来安装 uv:
# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
# On Windows.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
或者,也可以从 PyPI 安装:
# With pip.
pip install uv
# Or pipx.
pipx install uv
如果通过独立安装程序安装,uv 可以自行升级到最新版本:
uv self update
有关详细信息及其他安装方法,请参阅安装文档。
文档
uv 的文档可在 docs.astral.sh/uv 查看。
此外,还可以通过 uv help 查阅命令行参考文档。
功能
项目
uv 能够管理项目依赖项与运行环境,支持锁文件、工作区等功能,功能类似 rye 或 poetry:
$ uv init example
Initialized project `example` at `/home/user/example`
$ cd example
$ uv add ruff
Creating virtual environment at: .venv
Resolved 2 packages in 170ms
Built example @ file:///home/user/example
Prepared 2 packages in 627ms
Installed 2 packages in 1ms
+ example==0.1.0 (from file:///home/user/example)
+ ruff==0.5.0
$ uv run ruff check
All checks passed!
$ uv lock
Resolved 2 packages in 0.33ms
$ uv sync
Resolved 2 packages in 0.70ms
Checked 1 package in 0.02ms
如需入门,请参阅项目文档。
即便项目并非由 uv 管理,uv 也支持对其构建并发布。更多详情请参阅发布指南。
脚本
uv 能够为单文件脚本管理依赖项与运行环境。
创建一个新脚本,并在其中添加内联元数据以声明其依赖项:
$ echo 'import requests; print(requests.get("https://astral.sh"))' > example.py
$ uv add --script example.py requests
Updated `example.py`
然后,在独立的虚拟环境中运行该脚本:
$ uv run example.py
Reading inline script metadata from: example.py
Installed 5 packages in 12ms
<Response [200]>
请参阅 scripts 文档 以了解入门方法。
工具
uv 可以执行并安装 Python 包提供的命令行工具,其功能类似于 pipx。
可以使用 uvx(即 uv tool run 的别名)在临时环境中运行工具:
$ uvx pycowsay 'hello world!'
Resolved 1 package in 167ms
Installed 1 package in 9ms
+ pycowsay==0.0.0.2
"""
------------
< hello world! >
------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
使用 uv tool install 安装工具:
$ uv tool install ruff
Resolved 1 package in 6ms
Installed 1 package in 2ms
+ ruff==0.5.0
Installed 1 executable: ruff
$ ruff --version
ruff 0.5.0
请参阅 tools 文档 以了解入门方法。
Python 版本
uv 可以安装 Python,并允许用户快速在不同版本之间切换。
安装多个 Python 版本:
$ uv python install 3.12 3.13 3.14
Installed 3 versions in 972ms
+ cpython-3.12.12-macos-aarch64-none (python3.12)
+ cpython-3.13.9-macos-aarch64-none (python3.13)
+ cpython-3.14.0-macos-aarch64-none (python3.14)
根据需要下载 Python 版本:
$ uv venv --python 3.12.0
Using Python 3.12.0
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
$ uv run --python pypy@3.8 -- python --version
Python 3.8.16 (a9dbdca6fc3286b0addd2240f11d97d8e8de187a, Dec 29 2022, 11:45:30)
[PyPy 7.3.11 with GCC Apple LLVM 13.1.6 (clang-1316.0.21.2.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>>
在当前目录中使用特定的 Python 版本:
$ uv python pin 3.11
Pinned `.python-version` to `3.11`
请参阅 Python 安装文档 以了解入门方法。
pip 接口
uv 为常见的 pip、pip-tools 和 virtualenv 命令提供了直接替代方案。
uv 还通过高级功能扩展了这些接口,例如依赖版本覆盖、与平台无关的解析方式、可复现的解析结果、多种替代解析策略等等。
您无需更改现有的工作流程即可迁移到 uv,并通过 uv pip 接口获得 10 到 100 倍的速度提升。
将需求列表编译为与平台无关的需求文件:
$ uv pip compile requirements.in \
--universal \
--output-file requirements.txt
Resolved 43 packages in 12ms
创建虚拟环境:
$ uv venv
Using Python 3.12.3
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
安装已锁定的需求包:
$ uv pip sync requirements.txt
Resolved 43 packages in 11ms
Installed 43 packages in 208ms
+ babel==2.15.0
+ black==24.4.2
+ certifi==2024.7.4
...
请参阅 pip 接口文档 以了解入门方法。
贡献指南
我们热衷于为各种经验水平的贡献者提供支持,非常希望您能参与到项目中来。请参阅 contributing guide 以了解入门方法。
常见问题
uv 应该如何发音?
它的发音是 “you - vee”(/juː viː/)。
uv 的命名风格应如何?
请直接使用 “uv” 即可。详细规则请参见 style guide。
uv 支持哪些平台?
请参阅 uv 的 platform support 文档。
uv 已经可以用于生产环境了吗?
是的,uv 已经非常稳定,并被广泛用于生产环境。详细信息请参阅 uv 的 versioning policy 文档。
致谢
uv 的依赖解析器在底层使用了 PubGrub。我们非常感谢 PubGrub 的维护者们,尤其是 Jacob Finkelman 的支持。
uv 的 Git 实现基于 Cargo。
uv 的一些优化灵感来源于 pnpm、Orogene 和 Bun 的优秀成果。我们还从 Nathaniel J. Smith 的 Posy 中汲取了很多经验,并对其 trampoline 进行了修改以支持 Windows 系统。
许可证
uv 采用以下两种许可证中的一种进行授权,您可根据需求选择:
- Apache License,版本 2.0,(LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
除非您另有明确说明,否则根据 Apache-2.0 许可证的定义,您主动提交以纳入 uv 的任何贡献,均应遵循上述双重许可协议,不得附加任何其他条款或条件。