关于 uv
uv 是一个 Python 包管理器、项目初始化工具和环境管理器。它通过 uv init 创建项目、uv add 安装依赖、uv run 执行脚本,提供跨平台的高效开发工作流。
主要功能
- 01初始化新的 Python 项目并配置依赖管理
- 02快速添加和更新项目依赖包
- 03在隔离环境中执行 Python 脚本和应用
适用场景
- 01编码 Agent 快速设置和管理项目环境
- 02开发者创建可复现的 Python 工作区
- 03CI/CD 流程中的依赖管理和脚本执行
安装
选择你的系统或包管理器,复制命令到终端运行。
安装完成后运行uv --version确认安装成功。
命令示例
常用命令按使用顺序排列。
详细介绍
uv
一个使用 Rust 编写的极速 Python 软件包和项目管理器。
使用预热缓存安装 Trio 的依赖项。
亮点
- 一个工具即可替代
pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv等工具。 - 比
pip快 10~100 倍。 - 提供全面的项目管理功能,并支持通用锁文件。
- 运行脚本,支持内联依赖元数据。
- 安装和管理 Python 版本。
- 运行和安装以 Python 软件包形式发布的工具。
- 提供与
pip兼容的接口,通过熟悉的 CLI 提升性能。 - 支持 Cargo 风格的工作区,适用于可扩展项目。
- 节省磁盘空间,通过全局缓存去重依赖项。
- 可通过
curl或pip安装,无需 Rust 或 Python。 - 支持 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]>
请参阅脚本文档以开始使用。
工具
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
请参阅工具文档以开始使用。
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 [email protected] -- 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 倍的速度提升。
将 requirements 编译为与平台无关的 requirements 文件:
$ 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
安装已锁定的 requirements:
$ 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 接口文档以开始使用。
贡献
我们热衷于支持不同经验水平的贡献者,也非常欢迎你参与这个项目。请参阅 贡献指南以开始参与。
常见问题
uv 如何发音?
发音为“you - vee”(/juː viː/)。
uv 应该如何书写?
请直接写作“uv”。详情请参阅风格指南。
uv 支持哪些平台?
请参阅 uv 的平台支持文档。
uv 是否已适用于生产环境?
是的,uv 已稳定,并广泛用于生产环境。详情请参阅 uv 的 版本管理策略文档。
致谢
uv 的依赖解析器在底层使用了 PubGrub。我们感谢 PubGrub 的维护者,尤其是 Jacob Finkelman,感谢他们的支持。
uv 的 Git 实现基于 Cargo。
uv 的一些优化借鉴了我们在 pnpm、Orogene 和 Bun 中看到的出色成果。我们也从 Nathaniel J. Smith 的 Posy 中学到了很多,并将其 trampoline 改造后用于支持 Windows。
许可证
uv 根据以下任一许可证授权:
- Apache License,Version 2.0,(LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT license(LICENSE-MIT 或 https://opensource.org/licenses/MIT)
由你选择。
除非你明确声明另有规定,否则你有意提交以纳入 uv 的任何贡献(如 Apache-2.0 许可证所定义)均按上述两种许可证双重授权,不附加任何条款或条件。