PEP 566 – Python 软件包元数据 2.1
- 作者:
- Dustin Ingram <di at python.org>
- BDFL 代表:
- Daniel Holth
- 讨论邮件列表:
- Distutils-SIG 邮件列表
- 状态:
- 最终版
- 类型:
- 标准跟踪
- 主题:
- 打包
- 创建日期:
- 2017 年 12 月 1 日
- Python 版本:
- 3.x
- 发布历史:
- 替换:
- 345
- 决议:
- Distutils-SIG 消息
摘要
本 PEP 描述了 Python 包核心元数据规范 1.2 版和 2.1 版之间的更改。1.2 版在 PEP 345 中指定。
它还将字段规范的规范来源更改为 核心元数据规范 参考文档,其中包括字段名称及其语义和用法的详细信息。
字段
每个受支持元数据字段的名称和语义的规范来源是 核心元数据规范 文档。
标记为“(可多次使用)”的字段可以在单个 PKG-INFO 文件中多次指定。其他字段只能在 PKG-INFO 文件中出现一次。标记为“(可选)”的字段不需要出现在有效的 PKG-INFO 文件中;所有其他字段都必须存在。
2.1 版中的新增内容
Description-Content-Type(可选)
一个字符串,说明分发说明中使用的标记语法(如果有),以便工具能够智能地呈现说明。
从历史上看,像 PyPI 这样的工具假设软件包的说明采用 reStructuredText (reST) 格式,如果说明不是有效的 reST,则回退到纯文本。
此字段的引入允许 PyPI 支持其他类型的标记语法,而无需做出此假设。
此字段的完整规范在 核心元数据规范 中定义。
Provides-Extra(可选,可多次使用)
包含可选功能名称的字符串。必须是有效的 Python 标识符。可用于使依赖项取决于是否已请求可选功能。
此字段的引入允许软件包安装工具(如 pip
)确定给定软件包提供了哪些额外功能,以及软件包发布工具(如 twine
)可以检查使用额外功能的环境标记是否存在问题。
此字段的完整规范在 核心元数据规范 中定义。
2.1 版中的更改
名称
此字段的格式规范现在与 PEP 508 中定义的分发名称规范相同。
描述
除了 Description
标题字段外,分发的描述也可以在消息正文中提供(即,在标题后完全空一行之后,无需缩进或其他特殊格式)。
版本说明符
版本编号要求以及指定版本之间比较的语义在 PEP 440 中定义。在 PEP 440 中定义的直接引用也作为版本说明符的替代方案允许。
遵循 PEP 508,版本说明符不再需要在 Requires-Dist、Provides-Dist、Obsoletes-Dist 或 Requires-External 字段中用括号括起来,例如 requests >= 2.8.1
现在是一个有效的值。建议的格式是不带括号,但解析元数据的工具也应该能够处理带括号的版本说明符。此外,公共索引服务器 MAY 禁止这些字段中的严格版本匹配子句或直接引用。
除了 PEP 345 外,版本说明符的使用方式没有其他更改。
环境标记
**环境标记**是一种可以添加到字段末尾(分号“;”之后)的标记,以添加关于执行环境的条件。
用于声明此类条件的环境标记格式在 PEP 508 的环境标记部分中定义。
除了 PEP 345 外,环境标记的使用方式没有其他更改。
兼容 JSON 的元数据
可能需要将元数据存储在不允许重复键的数据结构中,例如 JSON。
将元数据字段转换为这种数据结构的规范方法如下
- 应使用
email.parser.HeaderParser
读取原始键值格式; - 所有转换后的键都应转换为小写。连字符应替换为下划线,但否则应保留所有其他字符;
- 任何标记为“(可多次使用)”的字段的转换值应为一个包含给定键的所有原始值的列表;
- 应通过以逗号分隔原始值来将
Keywords
字段转换为列表; - 如果存在消息正文,则应将其设置为
description
键的值。 - 结果应存储为一个字符串键字典。
与 PEP 345 的差异总结
参考文献
本文档指定了元数据格式的 2.1 版。1.0 版在 PEP 241 中指定。1.1 版在 PEP 314 中指定。1.2 版在 PEP 345 中指定。2.0 版虽然未正式接受,但在 PEP 426 中指定。
版权
本文件已置于公共领域。
致谢
感谢 Alyssa Coghlan 和 Thomas Kluyver 为此 PEP 做出的贡献。
来源:https://github.com/python/peps/blob/main/peps/pep-0566.rst
上次修改时间:2023-10-11 12:05:51 GMT