跳到内容

构建分发包

若要将项目分发给他人(例如上传到 PyPI 等索引),你需要将其构建为可分发的格式。

Python 项目通常以源码分发包(sdists)和二进制分发包(wheels)两种形式进行分发。前者通常是一个包含项目源代码及一些附加元数据的 .tar.gz.zip 文件;而后者是一个包含预构建制品的 .whl 文件,可以直接进行安装。

重要

当使用 uv build 时,uv 充当 构建前端,它仅负责确定要使用的 Python 版本并调用构建后端。构建的具体细节(如包含的文件和分发包文件名)由构建后端决定,具体定义在 [build-system] 中。有关构建配置的信息,请参阅相应工具的文档。

使用 uv build

uv build 可用于为你的项目构建源码分发包和二进制分发包。默认情况下,uv build 会在当前目录构建项目,并将构建后的制品放置在 dist/ 子目录中。

$ uv build
$ ls dist/
example-0.1.0-py3-none-any.whl
example-0.1.0.tar.gz

你可以通过向 uv build 提供路径来在不同目录中构建项目,例如 uv build path/to/project

uv build 将首先构建一个源码分发包,然后从该源码分发包中构建一个二进制分发包(wheel)。

你可以将 uv build 限制为仅构建源码分发包(使用 uv build --sdist)、仅构建二进制分发包(使用 uv build --wheel),或者从源码构建两者(使用 uv build --sdist --wheel)。

构建约束

uv build 接受 --build-constraint 参数,可用于在构建过程中约束任何构建依赖的版本。当与 --require-hashes 结合使用时,uv 将强制要求用于构建项目的依赖项匹配特定的已知哈希值,以确保可重复性。

例如,给定以下 constraints.txt

setuptools==68.2.2 --hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a

运行以下命令将使用指定版本的 setuptools 构建项目,并验证下载的 setuptools 分发包是否与指定的哈希值匹配

$ uv build --build-constraint constraints.txt --require-hashes

防止发布到 PyPI

如果你有不希望被发布的内部包,可以将它们标记为私有

[project]
classifiers = ["Private :: Do Not Upload"]

此设置会使 PyPI 拒绝你上传的包。它不会影响其他注册表上的安全或隐私设置。

我们也建议仅生成 项目专属的 PyPI API 令牌:如果没有与项目匹配的 PyPI 令牌,项目将无法被意外发布。