工具
工具是提供命令行界面的 Python 包。
注意
有关使用工具界面的介绍,请参阅工具指南 — 本文档讨论工具管理的详细信息。
uv tool 接口
uv 包括一个专用的工具交互界面。可以使用 uv tool run 在不安装的情况下调用工具,在这种情况下,它们的依赖项会安装在一个与当前项目隔离的临时虚拟环境中。
因为在不安装的情况下运行工具非常常见,所以为 uv tool run 提供了一个 uvx 别名 — 这两个命令完全等效。为简洁起见,文档将主要引用 uvx 而不是 uv tool run。
也可以使用 uv tool install 安装工具,在这种情况下,它们的可执行文件可以在 PATH 上使用 — 仍然使用隔离的虚拟环境,但命令完成后不会删除它。
执行 vs 安装
在大多数情况下,使用 uvx 执行工具比安装工具更合适。如果您需要工具可用于系统上的其他程序,例如,如果您不控制的某些脚本需要该工具,或者您在 Docker 镜像中并且希望使该工具可供用户使用,则安装该工具很有用。
工具环境
使用 uvx 运行工具时,虚拟环境存储在 uv 缓存目录中,并被视为可丢弃的,也就是说,如果您运行 uv cache clean,该环境将被删除。仅缓存环境以减少重复调用的开销。如果环境被删除,将自动创建一个新环境。
使用 uv tool install 安装工具时,会在 uv 工具目录中创建一个虚拟环境。除非卸载工具,否则不会删除该环境。如果手动删除该环境,工具将无法运行。
工具版本
除非请求特定版本,否则 uv tool install 将安装请求工具的最新可用版本。uvx 将在第一次调用时使用请求工具的最新可用版本。之后,uvx 将使用该工具的缓存版本,除非请求不同的版本、缓存被修剪或缓存被刷新。
例如,要运行特定版本的 Ruff
$ uvx [email protected] --version
ruff 0.6.0
后续的 uvx 调用将使用最新版本,而不是缓存的版本。
但是,如果发布了新版本的 Ruff,除非刷新缓存,否则不会使用它。
要请求最新版本的 Ruff 并刷新缓存,请使用 @latest 后缀
一旦使用 uv tool install 安装了工具,uvx 默认将使用已安装的版本。
例如,在安装旧版本的 Ruff 之后
ruff 和 uvx ruff 的版本是相同的
但是,您可以通过显式请求最新版本来忽略已安装的版本,例如
或者,通过使用 --isolated 标志,该标志将避免刷新缓存,但会忽略已安装的版本
uv tool install 也将遵循 {package}@{version} 和 {package}@latest 说明符,例如
$ uv tool install ruff@latest
$ uv tool install [email protected]
工具目录
默认情况下,uv 工具目录名为 tools,位于 uv 应用程序状态目录中,例如 ~/.local/share/uv/tools。该位置可以使用 UV_TOOL_DIR 环境变量进行自定义。
要显示工具安装目录的路径
工具环境放置在与工具包名称相同的目录中,例如 .../tools/<name>。
重要
工具环境不打算直接修改。强烈建议永远不要手动修改工具环境,例如,使用 pip 操作。
升级工具
可以通过 uv tool upgrade 升级工具环境,或者通过后续的 uv tool install 操作完全重新创建工具环境。
要升级工具环境中的所有软件包
要升级工具环境中的单个软件包
工具升级将遵循安装工具时提供的版本约束。例如,uv tool install black >=23,<24 后跟 uv tool upgrade black 将把 Black 升级到 >=23,<24 范围内的最新版本。
要改为替换版本约束,请使用 uv tool install 重新安装该工具
同样,工具升级将保留安装工具时提供的设置。例如,uv tool install black --prerelease allow 后跟 uv tool upgrade black 将保留 --prerelease allow 设置。
注意
工具升级将重新安装工具可执行文件,即使它们没有更改。
要在升级期间重新安装软件包,请使用 --reinstall 和 --reinstall-package 选项。
要重新安装工具环境中的所有软件包
要重新安装工具环境中的单个软件包
包含额外的依赖项
可以在工具执行期间包含其他软件包
并且,在工具安装期间
可以多次提供 --with 选项以包含其他软件包。
--with 选项支持软件包规范,因此可以请求特定版本
可以使用 -w 简写代替 --with 选项
如果请求的版本与工具包的要求冲突,则软件包解析将失败并且命令将出错。
Python 版本
每个工具环境都链接到特定的 Python 版本。这使用与其他 uv 创建的虚拟环境相同的 Python 版本发现逻辑,但会忽略非全局 Python 版本请求,如 .python-version 文件和 pyproject.toml 中的 requires-python 值。
可以使用 --python 选项来请求特定版本。有关更多详细信息,请参阅Python 版本文档。
如果工具使用的 Python 版本被卸载,则工具环境将被破坏并且工具可能无法使用。
工具可执行文件
工具可执行文件包括 Python 包提供的所有控制台入口点、脚本入口点和二进制脚本。工具可执行文件被符号链接到 Unix 上的 bin 目录中,并在 Windows 上复制。
bin 目录
可执行文件按照 XDG 标准安装到用户 bin 目录中,例如 ~/.local/bin。与 uv 中的其他目录方案不同,XDG 标准用于所有平台,特别是包括 Windows 和 macOS — 在这些平台上没有明确的替代位置来放置可执行文件。安装目录由第一个可用的环境变量确定
$UV_TOOL_BIN_DIR$XDG_BIN_HOME$XDG_DATA_HOME/../bin$HOME/.local/bin
不安装工具包的依赖项提供的可执行文件。
PATH
bin 目录必须位于 PATH 变量中,才能从 shell 中使用工具可执行文件。如果它不在 PATH 中,将显示警告。可以使用 uv tool update-shell 命令将 bin 目录添加到常见 shell 配置文件中的 PATH 中。
覆盖可执行文件
工具的安装不会覆盖先前不是由 uv 安装的 bin 目录中的可执行文件。例如,如果已使用 pipx 安装工具,则 uv tool install 将失败。可以使用 --force 标志来覆盖此行为。
与 uv run 的关系
调用 uv tool run <name> (或 uvx <name>) 几乎等同于
但是,使用 uv 的工具界面时,有一些值得注意的差异
- 不需要
--with选项 — 所需的包是从命令名称推断出来的。 - 临时环境缓存在专用位置。
- 不需要
--no-project标志 — 工具始终与项目隔离运行。 - 如果工具已经安装,
uv tool run将使用已安装的版本,但uv run不会。
如果工具不应与项目隔离,例如在运行 pytest 或 mypy 时,则应使用 uv run 代替 uv tool run。