跳转至

uv build

将 Python 包构建为源码分发包(source distribution)和轮子包(wheel)。

uv build 接受一个目录或源码分发包的路径,默认为当前工作目录。

默认情况下,如果传入目录,uv build 将从源码目录构建源码分发包("sdist"),并从源码分发包构建二进制分发包("wheel")。

uv build --sdist 可用于仅构建源码分发包,uv build --wheel 可用于仅构建二进制分发包,uv build --sdist --wheel 可用于从源码同时构建两种分发包。

如果传入源码分发包,uv build --wheel 将从该源码分发包构建 wheel。

用法(Usage)

uv build [OPTIONS] [SRC]

参数(Arguments)

SRC

用于构建分发包的目录,或者要构建为 wheel 的源码分发包归档文件。

默认为当前工作目录。

选项(Options)

--all-packages, --all

构建工作空间(workspace)中的所有包。

工作空间将从提供的源码目录中发现,如果未提供源码目录,则从当前目录中发现。

如果工作空间成员不存在,uv 将退出并报错。

--allow-insecure-host, --trusted-host allow-insecure-host

允许与主机的非安全连接。

可多次提供。

期望接收主机名(例如 localhost)、主机-端口对(例如 localhost:8080)或 URL(例如 https://localhost)。

警告:此列表中的主机将不会根据系统的证书存储进行验证。仅在具有已验证来源的安全网络中使用 --allow-insecure-host,因为它会绕过 SSL 验证,可能使您遭受中间人(MITM)攻击。

也可通过 UV_INSECURE_HOST 环境变量设置。

--build-constraints, --build-constraint, -b build-constraints

构建分发包时,使用给定的依赖要求文件(requirements files)来约束构建依赖。

约束文件(constraints files)是类似 requirements.txt 的文件,仅控制所安装的构建依赖的版本。但是,在约束文件中包含某个包并不会自动触发该包的安装。

也可通过 UV_BUILD_CONSTRAINT 环境变量设置。

--cache-dir cache-dir

缓存目录的路径。

在 macOS 和 Linux 上默认为 $XDG_CACHE_HOME/uv$HOME/.cache/uv,在 Windows 上默认为 %LOCALAPPDATA%\uv\cache

要查看缓存目录的位置,请运行 uv cache dir

也可通过 UV_CACHE_DIR 环境变量设置。

--clear

构建前清空输出目录,移除过时的构建产物

--color color-choice

控制输出中颜色的使用。

默认情况下,uv 会在写入终端时自动检测是否支持颜色。

可选值:

  • auto:仅在输出到支持颜色的终端或 TTY 时启用彩色输出
  • always:无论检测到的环境如何,始终启用彩色输出
  • never:禁用彩色输出
--config-file config-file

用于配置的 uv.toml 文件路径。

虽然 uv 配置可以包含在 pyproject.toml 文件中,但在当前上下文中不允许这样做。

也可通过 UV_CONFIG_FILE 环境变量设置。

--config-setting, --config-settings, -C config-setting

传递给 PEP 517 构建后端的设置,以 KEY=VALUE 对的形式指定

--config-settings-package, --config-settings-package config-settings-package

为特定包传递给 PEP 517 构建后端的设置,以 PACKAGE:KEY=VALUE 对的形式指定

--default-index default-index

默认包索引的 URL(默认为 https://pypi.org/simple)。

接受符合 PEP 503(简单仓库 API)的仓库,或按相同格式组织的本地目录。

通过此标志指定的索引的优先级低于通过 --index 标志指定的所有其他索引。

也可通过 UV_DEFAULT_INDEX 环境变量设置。

--directory directory

在运行命令之前切换到指定目录。

相对路径以给定目录为基准进行解析。

参见 --project 以仅更改项目根目录。

也可通过 UV_WORKING_DIR 环境变量设置。

--exclude-newer exclude-newer

将候选包限制为在给定日期之前上传的包。

日期比较的是每个单独分发包工件的上传时间(即每个文件上传到包索引的时间),而不是包版本的发布日期。

接受 RFC 3339 时间戳(例如 2006-12-02T02:07:43Z)、基于系统配置时区解析的相同格式的本地日期(例如 2006-12-02)、"友好"时长(例如 24 hours1 week30 days)或 ISO 8601 时长(例如 PT24HP7DP30D)。

时长不遵循本地时区的语义,始终解析为固定秒数,假设一天为 24 小时(例如忽略夏令时转换)。不允许使用月和年等日历单位。

也可通过 UV_EXCLUDE_NEWER 环境变量设置。

--exclude-newer-package exclude-newer-package

将特定包的候选包限制为在给定日期之前上传的包。

接受 PACKAGE=DATE 格式的包-日期对,其中 DATE 为 RFC 3339 时间戳(例如 2006-12-02T02:07:43Z)、基于系统配置时区解析的相同格式的本地日期(例如 2006-12-02)、"友好"时长(例如 24 hours1 week30 days)或 ISO 8601 时长(例如 PT24HP7DP30D)。

时长不遵循本地时区的语义,始终解析为固定秒数,假设一天为 24 小时(例如忽略夏令时转换)。不允许使用月和年等日历单位。

可为不同包多次提供。

--extra-index-url extra-index-url

(已弃用:请改用 --index)除 --index-url 之外要使用的额外包索引 URL。

接受符合 PEP 503(简单仓库 API)的仓库,或按相同格式组织的本地目录。

通过此标志提供的所有索引优先级高于 --index-url(默认为 PyPI)指定的索引。当提供多个 --extra-index-url 标志时,较早的值优先级更高。

也可通过 UV_EXTRA_INDEX_URL 环境变量设置。

除注册表索引中找到的分发包之外,用于搜索候选分发包的位置。

如果是路径,目标必须是一个目录,其中在顶层包含 wheel 文件(.whl)或源码分发包(例如 .tar.gz.zip)形式的包。

如果是 URL,页面必须包含一个扁平列表,其中包含指向符合上述格式的包文件的链接。

也可通过 UV_FIND_LINKS 环境变量设置。

--force-pep517

始终通过 PEP 517 构建,不使用 uv 构建后端的快速路径。

默认情况下,uv 不会为使用 uv 构建后端的包创建 PEP 517 构建环境,而是使用直接调用构建后端的快速路径。此选项强制始终使用 PEP 517。

--fork-strategy fork-strategy

跨 Python 版本和平台选择给定包的多个版本时使用的策略。

默认情况下,uv 会优化为每个受支持的 Python 版本(requires-python)选择每个包的最新版本,同时最小化跨平台选择的版本数量。

fewest 策略下,uv 将最小化每个包选择的版本数量,优先选择与更广泛的受支持 Python 版本或平台兼容的旧版本。

也可通过 UV_FORK_STRATEGY 环境变量设置。

可选值:

  • fewest:优化为每个包选择最少数量的版本。如果旧版本与更广泛的受支持 Python 版本或平台兼容,可能会优先选择旧版本
  • requires-python:优化为每个受支持的 Python 版本选择每个包的最新支持版本
--help, -h

显示此命令的简明帮助信息

--index index

解析依赖时使用的 URL,作为默认索引的补充。

接受符合 PEP 503(简单仓库 API)的仓库,或按相同格式组织的本地目录。

通过此标志提供的所有索引优先级高于 --default-index(默认为 PyPI)指定的索引。当提供多个 --index 标志时,较早的值优先级更高。

不支持将索引名称作为值。相对路径必须通过 ./../(Unix)或 .\\..\\./../(Windows)与索引名称区分开来。

也可通过 UV_INDEX 环境变量设置。

--index-strategy index-strategy

针对多个索引 URL 进行解析时使用的策略。

默认情况下,uv 会在第一个包含给定包的索引处停止,并将解析限制为该第一个索引上存在的包(first-index)。这可以防止"依赖混淆"(dependency confusion)攻击,即攻击者可以在备用索引上以相同名称上传恶意包。

也可通过 UV_INDEX_STRATEGY 环境变量设置。

可选值:

  • first-index:仅使用第一个为给定包名返回匹配结果的索引的结果
  • unsafe-first-match:在所有索引中搜索每个包名,在转到下一个索引之前穷尽第一个索引的版本
  • unsafe-best-match:在所有索引中搜索每个包名,优先选择找到的"最佳"版本。如果某个包版本在多个索引中,仅查看第一个索引中的条目
--index-url, -i index-url

(已弃用:请改用 --default-index)Python 包索引的 URL(默认为 https://pypi.org/simple)。

接受符合 PEP 503(简单仓库 API)的仓库,或按相同格式组织的本地目录。

通过此标志指定的索引的优先级低于通过 --extra-index-url 标志指定的所有其他索引。

也可通过 UV_INDEX_URL 环境变量设置。

--keyring-provider keyring-provider

尝试使用 keyring 进行索引 URL 的身份验证。

目前仅支持 --keyring-provider subprocess,它配置 uv 使用 keyring CLI 来处理身份验证。

默认为 disabled

也可通过 UV_KEYRING_PROVIDER 环境变量设置。

可选值:

  • disabled:不使用 keyring 进行凭据查找
  • subprocess:使用 keyring 命令进行凭据查找

从全局缓存安装包时使用的方法。

此选项仅在构建源码分发包时使用。

在 macOS 和 Linux 上默认为 clone(也称为写时复制 Copy-on-Write),在 Windows 上默认为 hardlink

警告:不鼓励使用符号链接(symlink)链接模式,因为它们会在缓存和目标环境之间创建紧密耦合。例如,清除缓存(uv cache clean)将通过移除底层源文件来破坏所有已安装的包。请谨慎使用符号链接。

也可通过 UV_LINK_MODE 环境变量设置。

可选值:

  • clone:将包从源克隆(即写时复制)到目标
  • copy:将包从源复制到目标
  • hardlink:将包从源硬链接到目标
  • symlink:将包从源符号链接到目标
--managed-python

要求使用 uv 管理的 Python 版本 [env: UV_MANAGED_PYTHON=]

默认情况下,uv 优先使用它管理的 Python 版本。但是,如果未安装 uv 管理的 Python,它将使用系统 Python 版本。此选项禁用系统 Python 版本的使用。

--no-binary

不安装预构建的 wheel。

给定的包将从源码构建并安装。解析器仍将使用预构建的 wheel 来提取包元数据(如果可用)。

也可通过 UV_NO_BINARY 环境变量设置。

--no-binary-package no-binary-package

不为特定包安装预构建的 wheel [env: UV_NO_BINARY_PACKAGE=]

--no-build

不构建源码分发包。

启用后,解析将不会运行任意 Python 代码。已构建的源码分发包的缓存 wheel 将被重用,但需要构建分发包的操作将退出并报错。

也可通过 UV_NO_BUILD 环境变量设置。

--no-build-isolation

构建源码分发包时禁用隔离。

假定 PEP 518 指定的构建依赖已经安装。

也可通过 UV_NO_BUILD_ISOLATION 环境变量设置。

--no-build-isolation-package no-build-isolation-package

为特定包构建源码分发包时禁用隔离。

假定该包的 PEP 518 指定的构建依赖已经安装。

--no-build-logs

隐藏构建后端的日志

--no-build-package no-build-package

不为特定包构建源码分发包 [env: UV_NO_BUILD_PACKAGE=]

--no-cache, --no-cache-dir, -n

避免读取或写入缓存,在操作期间改用临时目录

也可通过 UV_NO_CACHE 环境变量设置。

--no-config

避免发现配置文件(pyproject.tomluv.toml)。

通常,配置文件会在当前目录、父目录或用户配置目录中被发现。

也可通过 UV_NO_CONFIG 环境变量设置。

--no-create-gitignore

不在输出目录中创建 .gitignore 文件。

默认情况下,uv 会在输出目录中创建一个 .gitignore 文件,以将构建产物排除在版本控制之外。使用此标志时,将省略该文件。

--no-index

忽略注册表索引(例如 PyPI),改为依赖直接 URL 依赖和通过 --find-links 提供的依赖

--no-managed-python

禁用 uv 管理的 Python 版本 [env: UV_NO_MANAGED_PYTHON=]

相反,uv 将在系统上搜索合适的 Python 版本。