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 描述了一种向 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: C. Schultz, Universal Features Syndicate,
        Los Angeles, CA <cschultz@peanuts.example.com>

作者邮箱(可选)

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

示例

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

维护者(可选)

包含维护者姓名(至少)的字符串;可以提供其他联系信息。

请注意,此字段旨在在项目由非原始作者维护时使用:如果它与 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 项目,该项目现在可作为单独的发行版使用。安装此类源代码发行版可以满足对 ZODBtransaction 的需求。

发行版也可以提供一个“虚拟”项目名称,该名称与任何单独分发的项目都不对应:此类名称可用于指示可以由多个项目中的一个提供的抽象功能。例如,多个项目可能会提供供给定 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)

参考文献

本文档指定了元数据格式的 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

上次修改时间:2023-09-09 17:39:29 GMT