将构建要求指定为 setuptools pyproject.toml 中的文件

问题描述 投票:0回答:2

Setuptools 支持 pyproject.toml 中项目属性的

动态元数据
,并且作为 PEP517 后端,它还可以选择通过实现
get_requires_for_build_wheel
来指定构建要求。但我无法弄清楚它是否利用了这个机会并实现了一种根据配置选项指定构建需求的方法,如果是的话,如何在
pyproject.toml
中指定它。

我天真地尝试过

[build-system]
requires = {file = "requirements-build.txt"}

但是这会导致 pip 抱怨“这个包在 pyproject.toml 中有一个无效的

build-system.requires
键。”它不是一个字符串列表。”并添加

[project]
dynamic = ["build-system.requires"]

也不起作用,因为

dynamic
的可能选项已被明确枚举。鉴于所有基础设施元素都可用,如果没有此选项,我会感到有点惊讶,但我如何指定它?

setuptools build-dependencies pyproject.toml pep517
2个回答
1
投票

据我所知,这是不可能的。

如果您的用例确实有必要,并且您认为值得付出成本,也许可以通过(错误)使用“树内构建后端”功能来添加一些动态行为。


0
投票

在做了一些我自己的研究之后,使用 setuptools 是不可能的,因为构建系统需要规范声明这些是运行 setuptools 的要求。暗示它将失败而不是开始处理动态值。

setuptools pyproject.toml 文档显示它仅支持以下动态数据键。

钥匙 指令 注释
版本 属性,文件
自述文件 文件 这里还可以设置 "content-type":readme = {file =["README.txt", "USAGE.txt"], content-type = "text/plain"} 如果没有给出 content-type, "默认使用 text/x-rst"。
描述 文件 单行文本(无换行符)
分类器 文件 多行文本,每行一个分类器
入口点 文件 遵循入口点规范的INI格式(可以包含console_scripts和gui_scripts)
依赖关系 文件 requirements.txt 格式的子集(# 注释和空行除外)BETA 可选依赖项 每组的requirements.txt格式的子集(排除#注释和空行)BETA

此外,PEP 518指定了以下内容:

[build-system]
表用于存储与构建相关的数据。 最初,表中只有一个键有效,并且对于表来说是强制的:需要。该键必须具有表示执行构建系统所需的PEP 508依赖项的字符串列表的值(当前这意味着执行setup.py文件需要哪些依赖项)。

对于绝大多数依赖 setuptools 的 Python 项目,pyproject.toml 文件将是:

[build-system] #Minimum requirements for the build system to execute. requires = ["setuptools", "wheel"] # PEP 508 specifications.
由于目前社区中 setuptools 和 Wheel 的使用非常广泛,因此当 

pyproject.toml

 文件不存在时,构建工具应使用上面的示例配置文件作为默认语义。

工具不应要求存在

[build-system]

表。
pyproject.toml
 文件可用于存储除构建相关数据之外的配置详细信息,因此合法地缺少 
[build-system]
 表。如果文件存在但缺少 
[build-system]
 表,则应使用上面指定的默认值。 
如果指定了表但缺少必填字段,则该工具应将其视为错误。

© www.soinside.com 2019 - 2024. All rights reserved.