PEP 345 – Python 软件包元数据 1.2
- 作者:
- Richard Jones <richard at python.org>
- 讨论列表:
- Distutils-SIG 列表
- 状态:
- 已取代
- 类型:
- 标准跟踪
- 主题:
- 打包
- 创建日期:
- 2005年4月28日
- Python 版本:
- 2.7
- 历史记录:
- 2009年12月22日
- 取代:
- 314
- 被取代:
- 566
- 决议:
- Python-Dev 线程
摘要
本 PEP 描述了一种向 Python 发行版添加元数据的方法。它包括字段名称的具体信息,以及它们的语义和用法。
本文档指定了元数据格式的 1.2 版。1.0 版在 PEP 241 中指定。1.1 版在 PEP 314 中指定。
元数据格式的 1.2 版添加了许多可选字段,旨在使 Python 软件的第三方打包更容易。这些字段是“Requires-Python”、“Requires-External”、“Requires-Dist”、“Provides-Dist”和“Obsoletes-Dist”。此版本还更改了“Platform”字段。还添加了三个新字段:“Maintainer”、“Maintainer-email”和“Project-URL”。
最后,此新版本还添加了 environment markers
。
字段
本节指定每个支持的元数据字段的名称和语义。
标有“(可多次使用)”的字段可以在单个 PKG-INFO 文件中多次指定。其他字段只能在 PKG-INFO 文件中出现一次。标有“(可选)”的字段不需要出现在有效的 PKG-INFO 文件中;所有其他字段都必须存在。
元数据版本
文件格式的版本;“1.2”是唯一合法的值。
示例
Metadata-Version: 1.2
名称
发行版的名称。
示例
Name: BeagleVote
版本
包含发行版版本号的字符串。此字段必须采用 PEP 440 中指定的格式。
示例
Version: 1.0a2
平台(可多次使用)
描述发行版支持的操作系统的平台规范,这些操作系统未在“操作系统”Trove 分类器中列出。请参阅下面的“分类器”。
示例
Platform: ObscureUnix
Platform: RareDOS
支持的平台(可多次使用)
包含 PKG-INFO 文件的二进制发行版将使用其元数据中的 Supported-Platform 字段来指定为其编译二进制发行版而构建的操作系统和 CPU。Supported-Platform 字段的语义未在本 PEP 中指定。
示例
Supported-Platform: RedHat 7.2
Supported-Platform: i386-win32-2791
摘要
发行版功能的单行摘要。
示例
Summary: A module for collecting votes from beagles.
描述(可选)
发行版的较长描述,可以扩展到多个段落。处理元数据的软件不应假设此字段的最大大小,尽管人们不应将他们的使用手册作为描述。
此字段的内容可以使用 reStructuredText 标记编写 [1]。对于处理元数据的程序,支持标记是可选的;程序也可以按原样显示字段的内容。这意味着作者在使用的标记上应该保持谨慎。
为了支持空行和相对于 RFC 822 格式的缩进行,任何 CRLF 字符都必须后跟 7 个空格,然后跟一个管道字符 (“|”)。因此,Description 字段被编码成一个折叠字段,可以被 RFC 822#section-3.1.1 解析器解释。
示例
Description: This project provides powerful math functions
|For example, you can use ``sum()`` to sum numbers:
|
|Example::
|
| >>> sum(1, 2)
| 3
|
此编码意味着,当使用 RFC 822 阅读器展开字段时,CRLF 后跟 7 个空格和一个管道字符的所有出现都必须替换为单个 CRLF。
关键词(可选)
用于帮助在更大的目录中搜索发行版的其他关键词列表。
示例
Keywords: dog puppy voting election
主页(可选)
包含发行版主页 URL 的字符串。
示例
Home-page: http://www.example.com/~cschultz/bvote/
下载地址
包含可以从此版本的发行版下载的 URL 的字符串。(这意味着 URL 不能是类似“…/BeagleVote-latest.tgz”的内容,而必须是“…/BeagleVote-0.45.tgz”。)
维护者(可选)
包含维护者姓名(至少)的字符串;可以提供其他联系信息。
请注意,此字段旨在在项目由非原始作者维护时使用:如果它与 Author
相同,则应省略它。
示例
Maintainer: C. Schultz, Universal Features Syndicate,
Los Angeles, CA <cschultz@peanuts.example.com>
维护者邮箱(可选)
包含维护者电子邮件地址的字符串。它可以包含姓名和电子邮件地址,采用 RFC 822 From:
标头的合法格式。
请注意,此字段旨在在项目由非原始作者维护时使用:如果它与 Author-email
相同,则应省略它。
示例
Maintainer-email: "C. Schultz" <cschultz@example.com>
许可证(可选)
指示涵盖发行版的许可证的文本,其中许可证不是“许可证”Trove 分类器中的选择。请参阅下面的“分类器”。此字段也可用于指定通过 Classifier
字段命名的许可证的特定版本,或指示此类许可证的变体或例外情况。
示例
License: This software may only be obtained by sending the
author a postcard, and then the user promises not
to redistribute it.
License: GPL version 3, excluding DRM provisions
分类器(可多次使用)
每个条目都是一个字符串,为发行版提供单个分类值。分类器在 PEP 301 中进行了描述。
示例
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console (Text Based)
所需分发(可多次使用)
每个条目都包含一个字符串,命名此发行版所需的其他 distutils 项目。
需求字符串的格式与 distutils 项目名称的格式相同(例如,在 Name:
字段中找到)。可选地后跟括号内的版本声明。
distutils 项目名称应与 Python 软件包索引 上找到的名称相对应。
版本声明必须遵循 版本说明符 中描述的规则
示例
Requires-Dist: pkginfo
Requires-Dist: PasteDeploy
Requires-Dist: zope.interface (>3.5.0)
提供分发(可多次使用)
每个条目都包含一个字符串,命名包含在此发行版中的 Distutils 项目。此字段必须包括 Name
字段中标识的项目,后跟版本:名称(版本)。
发行版可以提供其他名称,例如指示多个项目已捆绑在一起。例如,ZODB
项目的源代码发行版历来包含 transaction
项目,该项目现在可作为单独的发行版使用。安装此类源代码发行版可以满足对 ZODB
和 transaction
的需求。
发行版也可以提供一个“虚拟”项目名称,该名称与任何单独分发的项目都不对应:此类名称可用于指示可以由多个项目中的一个提供的抽象功能。例如,多个项目可能会提供供给定 ORM 使用的 RDBMS 绑定:每个项目都可能声明它提供了 ORM-bindings
,从而允许其他项目仅依赖于已安装的项目至多一个。
可以提供版本声明,并且必须遵循 版本说明符 中描述的规则。如果未指定,则将隐含发行版的版本号。
示例
Provides-Dist: OtherProject
Provides-Dist: AnotherProject (3.4)
Provides-Dist: virtual_package
已废弃分发(可多次使用)
每个条目都包含一个字符串,描述此发行版使之过时的 distutils 项目的发行版,这意味着这两个项目不应同时安装。
可以提供版本声明。版本号必须采用 版本说明符 中指定的格式。
此字段最常见的用法是项目名称更改的情况,例如 Gorgon 2.3 被并入 Torqued Python 1.0。当您安装 Torqued Python 时,应删除 Gorgon 发行版。
示例
Obsoletes-Dist: Gorgon
Obsoletes-Dist: OtherProject (<3.0)
所需 Python 版本
此字段指定发行版保证兼容的 Python 版本。
版本号必须采用 版本说明符 中指定的格式。
示例
Requires-Python: 2.5
Requires-Python: >2.1
Requires-Python: >=2.3.4
Requires-Python: >=2.5,<2.7
外部依赖(可多次使用)
每个条目都包含一个字符串,描述系统中发行版将要使用的某些依赖项。此字段旨在作为对下游项目维护者的提示,并且没有对 distutils
发行版有意义的语义。
需求字符串的格式是外部依赖项的名称,可选地后跟括号内的版本声明。
由于它们引用的是非 Python 软件版本,因此此字段的版本号**不需要**符合 PEP 440 中指定的格式:它们应与外部依赖项使用的版本方案相对应。
请注意,对要使用的字符串没有特定规则。
示例
Requires-External: C
Requires-External: libpng (>=1.5)
项目网址(可多次使用)
包含项目额外 URL 和其标签的字符串,由逗号分隔。当除了“主页”字段之外,元数据中还有其他 URL 需要列出时,应使用此字段。
示例
Project-URL: Bug Tracker, https://github.com/pypa/setuptools/issues
Project-URL: Documentation, https://setuptools.readthedocs.io/
Project-URL: Funding, https://donate.pypi.org
标签是自由文本,最大长度为 32 个字符。请注意,上传到 PyPI 的发行版将在其目标页面的“项目链接”部分显示这些额外的条目。
版本说明符
版本说明符是一系列条件运算符和版本号,用逗号分隔。条件运算符必须是“<”、“>”、“<=”、“>=”、“==”和“!=”之一。
可以指定任意数量的条件运算符,例如字符串“>1.0, !=1.3.4, <2.0”是一个合法的版本声明。逗号(“,”)等价于**and**运算符。
每个版本号必须采用PEP 440中指定的格式。
当提供版本时,它始终包含所有以相同值开头的版本。例如,Python 的“2.5”版本将包含“2.5.2”或“2.5.3”等版本。在这种情况下,预发布版和后发布版被排除在外。因此,在我们的示例中,当使用“2.5”时,不包含“2.5a1”之类的版本。如果需要范围的第一个版本,则必须明确给出。在我们的示例中,它将是“2.5.0”。
请注意,某些项目可能会省略“2.5.x”系列的第一个版本的“.0”后缀。
- 2.5
- 2.5.1
- 2.5.2
- 等等。
在这种情况下,必须明确使用“2.5.0”以避免“2.5”表示完整范围的表示法之间的任何混淆。建议对一个系列使用相同长度的方案以完全避免此问题。
一些示例
Requires-Dist: zope.interface (3.1)
:任何以 3.1 开头的版本,不包括预发布版或后发布版。Requires-Dist: zope.interface (3.1.0)
:任何以 3.1.0 开头的版本,不包括预发布版或后发布版。由于该特定项目不使用超过 3 位数字,因此它也意味着“仅 3.1.0 版本”。Requires-Python: 3
:任何 Python 3 版本,无论哪个版本,都不包括预发布版或后发布版。Requires-Python: >=2.6,<3
:Python 2.6 或 2.7 的任何版本,包括 2.6 的后发布版,2.7 的预发布版和后发布版。它不包括 Python 3 的预发布版。Requires-Python: 2.6.2
:等价于“>=2.6.2,<2.6.3”。因此,这仅包括 Python 2.6.2。当然,如果 Python 的编号使用 4 位数字,它将包含 2.6.2 系列的所有版本。Requires-Python: 2.5.0
:等价于“>=2.5.0,<2.5.1”。Requires-Dist: zope.interface (3.1,!=3.1.3)
:任何以 3.1 开头的版本,不包括 3.1 的预发布版或后发布版*以及*任何以“3.1.3”开头的版本。对于此特定项目,这意味着:“3.1 系列的任何版本,但 3.1.3 除外”。这等价于:“>=3.1,!=3.1.3,<3.2”。
环境标记
**环境标记**是在分号(“;”)之后添加到字段末尾的标记,以添加关于执行环境的条件。
以下是一些使用此类标记的字段示例。
Requires-Dist: pywin32 (>1.0); sys.platform == 'win32'
Obsoletes-Dist: pywin31; sys.platform == 'win32'
Requires-Dist: foo (1,!=1.3); platform.machine == 'i386'
Requires-Dist: bar; python_version == '2.4' or python_version == '2.5'
Requires-External: libxslt; 'linux' in sys.platform
其背后的微型语言尽可能简单:它仅使用==
和in
运算符(及其相反)比较字符串,并能够组合表达式。这也使得非 Python 程序员易于理解。
伪语法为
EXPR [in|==|!=|not in] EXPR [or|and] ...
其中EXPR
属于以下任何一项
- python_version = ‘%s.%s’ % (sys.version_info[0], sys.version_info[1])
- python_full_version = sys.version.split()[0]
- os.name = os.name
- sys.platform = sys.platform
- platform.version = platform.version()
- platform.machine = platform.machine()
- platform.python_implementation = platform.python_implementation()
- 自由字符串,如
'2.4'
或'win32'
请注意,in
仅限于字符串,这意味着无法在右侧使用其他序列(如元组或列表)。
受益于此标记的字段为
- Requires-External
- Requires-Dist
- Provides-Dist
- Obsoletes-Dist
- Classifier
与 PEP 314 的差异总结
- Metadata-Version 现在为 1.2。
- 添加了环境标记。
- 更改的字段
- Platform(语法更改)
- Author-email(更改为可选字段)
- 添加的字段
- Maintainer
- Maintainer-email
- 所需 Python 版本
- Requires-External
- Requires-Dist
- Provides-Dist
- Obsoletes-Dist
- Project-URL
- 已弃用的字段
- Requires(改为 Requires-Dist)
- Provides(改为 Provides-Dist)
- Obsoletes(改为 Obsoletes-Dist)
参考文献
版权
本文档已进入公有领域。
致谢
Fred Drake、Anthony Baxter 和 Matthias Klose 都对本 PEP 中提出的想法做出了贡献。
Tres Seaver、Jim Fulton、Marc-André Lemburg、Martin von Löwis、Tarek Ziadé、David Lyon 和 Distutils-SIG 的其他人员为新更新版本做出了贡献。
来源:https://github.com/python/peps/blob/main/peps/pep-0345.rst
上次修改时间:2023-09-09 17:39:29 GMT