ITADN
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

uv

Latest PyPI version Supported Python versions Discord

一个用 Rust 编写的、速度极快的 Python 包管理工具与项目管理器。

显示包含基准测试结果的条形图。

使用温热缓存安装 Trio 的依赖项。

主要特点

uv 由 Astral 提供支持,该公司也是 Ruffty 的创建者。

安装

可以使用我们的独立安装程序来安装 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 能够管理项目依赖项与运行环境,支持锁文件、工作区等功能,功能类似 ryepoetry

$ 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 为常见的 pippip-toolsvirtualenv 命令提供了直接替代方案。

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 的一些优化灵感来源于 pnpmOrogeneBun 的优秀成果。我们还从 Nathaniel J. Smith 的 Posy 中汲取了很多经验,并对其 trampoline 进行了修改以支持 Windows 系统。

许可证

uv 采用以下两种许可证中的一种进行授权,您可根据需求选择:

除非您另有明确说明,否则根据 Apache-2.0 许可证的定义,您主动提交以纳入 uv 的任何贡献,均应遵循上述双重许可协议,不得附加任何其他条款或条件。