跳转至

使用工具

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

运行工具

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

例如,要运行 ruff

$ uvx ruff

注意

这与以下命令完全等效:

$ uv tool run ruff

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

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

$ uvx pycowsay hello from uv

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

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

注意

如果你在 项目 中运行工具,且该工具要求安装你的项目,例如使用 pytestmypy 时,你应使用 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 了。

提示

uvxuv 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 操作的是一个 ,并且会安装该工具提供的所有可执行文件。

例如,以下命令将安装 httphttpshttpie 可执行文件:

$ 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 管理工具的信息,请参阅 工具概念 页面和 命令参考

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