Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

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 是一份历史文档。最新且权威的规范,核心元数据规范,维护在 PyPA 规范页面上。

×

有关如何提出更改的建议,请参阅PyPA 规范更新流程

摘要

本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”。

最后,这个新版本还添加了环境 标记

字段

本节规定了每个支持的元数据字段的名称和语义。

标有“(多次使用)”的字段可以在单个 PKG-INFO 文件中多次指定。其他字段在 PKG-INFO 文件中只能出现一次。标有“(可选)”的字段在有效的 PKG-INFO 文件中不是必需的;所有其他字段都必须存在。

元数据版本(Metadata-Version)

文件格式版本;“1.2”是唯一合法的值。

示例

Metadata-Version: 1.2

名称

发行版的名称。

示例

Name: BeagleVote

版本

包含发行版版本号的字符串。此字段必须采用PEP 440中指定的格式。

示例

Version: 1.0a2

平台(Platform)(多重使用)

一个平台规范,描述了发行版支持的操作系统,该操作系统未在“操作系统”Trove分类器中列出。请参阅下面的“分类器”。

示例

Platform: ObscureUnix
Platform: RareDOS

Supported-Platform(多次使用)

包含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.

描述(Description)(可选)

发行版的较长描述,可以跨越多个段落。处理元数据的软件不应假设此字段有任何最大大小,尽管人们不应将他们的说明手册作为描述。

此字段的内容可以使用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阅读器展开字段时,任何后跟7个空格和竖线字符的CRLF都必须替换为单个CRLF。

关键词(Keywords)(可选)

用于协助在更大目录中搜索发行版的附加关键字列表。

示例

Keywords: dog puppy voting election

主页(Home-page)(可选)

包含发行版主页URL的字符串。

示例

Home-page: http://www.example.com/~cschultz/bvote/

Download-URL

包含可以下载此版本发行版的URL的字符串。(这意味着URL不能是“…/BeagleVote-latest.tgz”之类的,而必须是“…/BeagleVote-0.45.tgz”。)

作者(Author)(可选)

包含作者姓名的字符串,至少;可以提供额外的联系信息。

示例

Author: C. Schultz, Universal Features Syndicate,
        Los Angeles, CA <cschultz@peanuts.example.com>

Author-email(可选)

包含作者电子邮件地址的字符串。它可以包含名称和电子邮件地址,采用RFC 822 From: 标头所允许的合法形式。

示例

Author-email: "C. Schultz" <cschultz@example.com>

Maintainer(可选)

包含维护者姓名的字符串,至少;可以提供额外的联系信息。

请注意,此字段旨在用于项目由原作者以外的人维护的情况:如果与Author相同,则应省略此字段。

示例

Maintainer: C. Schultz, Universal Features Syndicate,
        Los Angeles, CA <cschultz@peanuts.example.com>

Maintainer-email(可选)

包含维护者电子邮件地址的字符串。它可以包含名称和电子邮件地址,采用RFC 822 From: 标头所允许的合法形式。

请注意,此字段旨在用于项目由原作者以外的人维护的情况:如果与Author-email相同,则应省略此字段。

示例

Maintainer-email: "C. Schultz" <cschultz@example.com>

License(可选)

指示发行版所涵盖的许可证的文本,其中许可证不是“License”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

Classifier(多次使用)

每个条目是一个字符串,给出发行版的单个分类值。分类器在PEP 301中描述。

示例

Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console (Text Based)

Requires-Dist(多次使用)

每个条目都包含一个字符串,命名此发行版所需的其他distutils项目。

需求字符串的格式与distutils项目名称的格式相同(例如,在Name:字段中找到的名称)。可选地,后面可以跟括号内的版本声明。

distutils项目名称应与Python Package Index上的名称对应。

版本声明必须遵循版本说明符中描述的规则

示例

Requires-Dist: pkginfo
Requires-Dist: PasteDeploy
Requires-Dist: zope.interface (>3.5.0)

Provides-Dist(多次使用)

每个条目都包含一个字符串,命名此发行版中包含的Distutils项目。此字段必须包含Name字段中标识的项目,后跟版本:名称(版本)。

发行版可以提供附加名称,例如,指示多个项目已捆绑在一起。例如,ZODB项目的源代码发行版历史上包含transaction项目,该项目现在作为单独的发行版提供。安装此类源代码发行版可满足对ZODBtransaction的要求。

发行版还可以提供一个“虚拟”项目名称,该名称不对应任何单独分发的项目:这样的名称可能用于指示一种抽象能力,该能力可以由多个项目中的一个提供。例如,多个项目可能为给定的ORM提供RDBMS绑定:每个项目可能声明它提供ORM-bindings,允许其他项目仅依赖于最多安装其中一个。

可以提供版本声明,并且必须遵循版本说明符中描述的规则。如果未指定版本号,则将隐含发行版的版本号。

示例

Provides-Dist: OtherProject
Provides-Dist: AnotherProject (3.4)
Provides-Dist: virtual_package

Obsoletes-Dist(多次使用)

每个条目都包含一个字符串,描述此发行版所废弃的distutils项目发行版,这意味着这两个项目不应同时安装。

可以提供版本声明。版本号必须采用版本说明符中指定的格式。

此字段最常见的用途是项目名称更改的情况,例如,Gorgon 2.3被并入Torqued Python 1.0。安装Torqued Python时,应删除Gorgon发行版。

示例

Obsoletes-Dist: Gorgon
Obsoletes-Dist: OtherProject (<3.0)

Requires-Python

此字段指定发行版保证兼容的Python版本。

版本号必须采用版本说明符中指定的格式。

示例

Requires-Python: 2.5
Requires-Python: >2.1
Requires-Python: >=2.3.4
Requires-Python: >=2.5,<2.7

Requires-External(多次使用)

每个条目都包含一个字符串,描述系统中的某些依赖项,发行版将使用这些依赖项。此字段旨在作为对下游项目维护者的提示,并且对于distutils发行版没有有意义的语义。

需求字符串的格式是外部依赖项的名称,可选地后跟括号内的版本声明。

因为它们指的是非Python软件版本,所以此字段的版本号**不**需要符合PEP 440中指定的格式:它们应与外部依赖项使用的版本方案对应。

请注意,对要使用的字符串没有特定规则。

示例

Requires-External: C
Requires-External: libpng (>=1.5)

Project-URL(多次使用)

一个字符串,包含项目的额外URL及其标签,用逗号分隔。当元数据中除了“Home-page”字段外还有其他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
    • Requires-Python
    • Requires-External
    • Requires-Dist
    • Provides-Dist
    • Obsoletes-Dist
    • Project-URL
  • 已弃用字段
    • Requires(改为Requires-Dist)
    • Provides(改为Provides-Dist)
    • Obsoletes(改为Obsoletes-Dist)

参考资料

本文档指定元数据格式的1.2版本。1.0版本在PEP 241中指定。1.1版本在PEP 314中指定。

致谢

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

最后修改:2025-02-01 08:55:40 GMT