构建配置#
所有构建配置都存储在 tool.pdm.build 表下。
指定包目录#
你可以通过设置 package-dir 选项告诉后端在另一个目录下查找 Python 包:
[tool.pdm.build]
package-dir = "src"
备注
缺省值:. (项目根),如果检测到 src,则为 src。
包括和排除文件#
可以告诉后端使用 includes 和 excludes 设置从构建结果中包含其他文件或排除一些文件。每个设置都是 glob 模式数组,如果模式是目录名,它将被递归地包含或排除。所有相对路径都是从项目根计算的。
[tool.pdm.build]
includes = ["src", "data/*.json"]
excludes = ["*.o"]
只在 sdist 中包含文件#
source-include 中的文件模式将仅被 sdist 包含,而被 wheel 和 editable 构建排除。
source-includes = ["tests"]
包含和排除的优先级#
如果文件同时被 includes 和 excludes 覆盖,则模式中路径部分较多且通配符较少的文件胜出,否则,如果长度相同,则 excludes 优先。
例如,给定以下配置:
includes = ["src"]
excludes = ["**/*.json"]
src/foo/data.json 将被排除,因为 excludes 中的模式有更多的路径部分,但是,如果将配置更改为:
includes = ["src", "src/foo/data.json"]
excludes = ["**/*.json"]
相同的文件将被包含,因为它被包含在具有更特定路径的 includes 中。
默认行为#
如果没有指定 includes 和 excludes,后端可以按照以下规则确定它们:
如果在
package-dir下找到顶级包,则将包括它们以及其中的任何数据文件。否则,将包括
package-dir下的所有顶级*.py文件。如果找到
tests下的测试文件,则由 sdist 包含,并由其他格式排除。
备注
指定 includes 和 excludes 将覆盖默认值,因此需要手动包含包目录。*.pyc、__pycache__/ 和 build/ 总是被排除在外。
本地构建钩子#
您可以指定要在构建过程之前执行的自定义脚本,该脚本可用于生成文件或修改元数据。项目根目录下名为 pdm_build.py 的文件将被自动检测为自定义钩子脚本,或者你可以通过自定义钩子设置指定名称:
[tool.pdm.build]
custom-hook = "build.py"
缺省值:pdm_build.py。
运行 setuptools#
由于缺乏构建 C 扩展的能力,pdm-backend 允许用户从项目中自动生成 setup.py 调用 setuptools。这可以通过将 run-setuptools 设置为 true 来启用:
[tool.pdm.build]
run-setuptools = true
默认值:false。
钩子函数 pdm_build_update_setup_kwargs 将被调用来修改传递给 setup() 函数的参数。
is-purelib#
默认情况下,pdm-backend 使用标记 py3-none-any 生成非特定于平台的轮子。但是如果 run-setuptools 为真,那么构建的轮子将是特定于平台的。你可以通过显式地将 is-purelib 设置为 true 或 false 来覆盖这个行为:
[tool.pdm.build]
is-purelib = true
选择可编辑的构建格式#
pdm-backend 支持两种方式来构建 可编辑的轮子,path 和 editables,前者是默认的。它可以通过 editable-backend 设置更改:
[tool.pdm.build]
editable-backend = "editables"
path
在这种方法中,可编辑的构建将非常类似于 setuptools 生成的遗留格式。一个包含包的父路径的 .pth 文件将被安装到 site-packages 目录中。
editables
如果选择这种方法,后端将安装代理模块,该模块将 import 语句重定向到包的实际位置,该位置由可编辑包提供支持。
命令行构建选项#
一些构建前端(如 build 和 pdm)支持将选项从命令行传递到后端。pdm-backend 支持以下选项:
--python-tag=<tag>Override the python implementation compatibility tag(e.g.cp37,py3,pp3)--py-limited-api=<abi>Python tag (cp32|cp33|cpNN) for abi3 wheel tag--plat-name=<plat>Override the platform name(e.g.win_amd64,manylinux2010_x86_64)no-clean-buildDon’t clean the build directory before the build starts, this can also work by setting env varPDM_BUILD_NO_CLEANto1.
例如,你可以用 build 来提供这些选项:
python -m build --sdist --wheel --outdir dist/ --config-setting="--python-tag=cp37" --config-setting="--plat-name=win_amd64"
环境变量#
SOURCE_DATE_EPOCH: Set the timestamp(seconds) of the zipinfo in the wheel for reproducible builds. The default date is 2016/01/01.