跳转至

使用工具

许多 Python 软件包提供了可用作工具的应用程序。uv 对轻松调用和安装工具提供了专门支持。

运行工具

uvx 命令可在不安装工具的情况下调用它。

例如,要运行 ruff:

$ uvx ruff

Tip

这与以下命令完全等效:

$ uv tool run ruff

uvx 作为别名提供,以方便使用。

可在工具名称后提供参数:

$ uvx pycowsay hello from uv

  -------------
< hello from uv >
  -------------
   \   ^__^
    \  (oo)\_______
       (__)\       )\/\
           ||----w |
           ||     ||

使用 uvx 时,工具会安装到临时的隔离环境中。

Tip

如果你在 项目 中运行工具,且该工具要求安装你的项目,例如使用 pytest 或 mypy 时,你应使用 uv run 而非 uvx。否则,该工具将在与你的项目隔离的虚拟环境中运行。

如果你的项目结构较为扁平,例如,模块没有使用 src 目录,那么项目本身无需安装,使用 uvx 即可。在这种情况下,只有当你想在项目依赖中固定工具的版本时,使用 uv run 才更有好处。

软件包名与命令名不同的情况

当调用 uvx ruff 时,uv 会安装提供 ruff 命令的 ruff 软件包。然而,有时软件包名和命令名会有所不同。

可使用 --from 选项从特定软件包调用命令,例如由 httpie 提供的 http 命令:

$ uvx --from httpie http

请求特定版本

要运行特定版本的工具,使用 command@<version>:

$ uvx ruff@0.3.0 check

要运行最新版本的工具,使用 command@latest:

$ uvx ruff@latest check

--from 选项也可用于指定包版本,如下所示:

$ uvx --from 'ruff==0.3.0' ruff check

或者,限制版本范围:

$ uvx --from 'ruff>0.2.0,<0.3.0' ruff check

请注意,@ 语法只能用于指定确切版本。

请求额外功能

--from 选项可用于运行带有额外功能的工具:

$ uvx --from 'mypy[faster-cache,reports]' mypy --xml-report mypy_report

这也可以与版本选择结合使用:

$ uvx --from 'mypy[faster-cache,reports]==1.13.0' mypy --xml-report mypy_report

请求不同的源

--from 选项还可用于从其他源安装。

例如,从 git 拉取:

$ uvx --from git+https://github.com/httpie/cli httpie

你还可以从特定命名分支拉取最新提交:

$ uvx --from git+https://github.com/httpie/cli@master httpie

或者拉取特定标签:

$ uvx --from git+https://github.com/httpie/cli@3.2.4 httpie

甚至特定提交:

$ uvx --from git+https://github.com/httpie/cli@2843b87 httpie

带插件的命令

可以包含其他依赖项,例如,在运行 mkdocs 时包含 mkdocs-material:

$ uvx --with mkdocs-material mkdocs --help

安装工具

如果经常使用某个工具,将其安装到持久化环境并添加到 PATH 中会很有用,这样就无需反复调用 uvx 了。

提示

uvx 是 uv tool run 的便捷别名。与工具交互的所有其他命令都需要完整的 uv tool 前缀。

要安装 ruff:

$ uv tool install ruff

安装工具后,其可执行文件会被放置在 PATH 中的 bin 目录下,这样就可以不通过 uv 来运行该工具。如果它不在 PATH 中,会显示一条警告,此时可以使用 uv tool update-shell 将其添加到 PATH 中。

安装 ruff 后,它应该就可以使用了:

$ ruff --version

与 uv pip install 不同,安装工具并不会使其模块在当前环境中可用。例如,以下命令会失败:

$ python -c "import ruff"

这种隔离对于减少工具、脚本和项目的依赖之间的相互影响和冲突很重要。

与 uvx 不同,uv tool install 操作的是一个 包,并且会安装该工具提供的所有可执行文件。

例如,以下命令将安装 http、https 和 httpie 可执行文件:

$ uv tool install httpie

此外,无需 --from 即可指定包版本:

$ uv tool install 'httpie>0.1.0'

同样,对于包源也是如此:

$ uv tool install git+https://github.com/httpie/cli

与 uvx 一样,安装时可以包含其他包:

$ uv tool install mkdocs --with mkdocs-material

升级工具

要升级工具,请使用 uv tool upgrade:

$ uv tool upgrade ruff

工具升级将遵循安装工具时提供的版本约束。例如,先执行 uv tool install ruff >=0.3,<0.4,再执行 uv tool upgrade ruff,会将 Ruff 升级到 >=0.3,<0.4 范围内的最新版本。

若要替换版本约束,请使用 uv tool install 重新安装工具:

$ uv tool install ruff>=0.4

若要升级所有工具:

$ uv tool upgrade --all

请求 Python 版本

默认情况下,uv 在运行、安装或升级工具时,将使用默认的 Python 解释器(找到的第一个)。你可以使用 --python 选项指定要使用的 Python 解释器。

例如,在运行工具时请求特定的 Python 版本:

$ uvx --python 3.10 ruff

或者,在安装工具时:

$ uv tool install --python 3.10 ruff

或者,在升级工具时:

$ uv tool upgrade --python 3.10 ruff

有关请求 Python 版本的更多详细信息,请参阅 Python 版本概念页面。

旧版 Windows 脚本

工具还支持运行 旧版 setuptools 脚本。 安装后,可通过 $(uv tool dir)\<工具名称>\Scripts 访问这些脚本。

目前仅支持扩展名为 .ps1、.cmd 和 .bat 的旧版脚本。

例如,以下是运行命令提示符脚本的示例。

$ uv tool run --from nuitka==2.6.7 nuitka.cmd --version

此外,你无需指定扩展名。uvx 将自动按顺序查找以 .ps1、.cmd 和 .bat 结尾的文件并为你执行。

$ uv tool run --from nuitka==2.6.7 nuitka --version

后续步骤

要了解更多关于使用 uv 管理工具的信息,请参阅 工具概念 页面和 命令参考。

或者,继续阅读以了解如何 处理项目。