2012-08-31 09:53:29 -04:00
|
|
|
|
PEP: 426
|
2013-02-17 04:43:54 -05:00
|
|
|
|
Title: Metadata for Python Software Packages 2.0
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Version: $Revision$
|
|
|
|
|
Last-Modified: $Date$
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Author: Daniel Holth <dholth@fastmail.fm>,
|
|
|
|
|
Donald Stufft <donald@stufft.io>,
|
|
|
|
|
Nick Coghlan <ncoghlan@gmail.com>
|
2013-02-17 03:17:24 -05:00
|
|
|
|
BDFL-Delegate: Nick Coghlan <ncoghlan@gmail.com>
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Discussions-To: Distutils SIG
|
|
|
|
|
Status: Draft
|
|
|
|
|
Type: Standards Track
|
|
|
|
|
Content-Type: text/x-rst
|
|
|
|
|
Created: 30 Aug 2012
|
2013-02-09 08:23:15 -05:00
|
|
|
|
Post-History: 14 Nov 2012, 5 Feb 2013, 7 Feb 2013, 9 Feb 2013
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Abstract
|
|
|
|
|
========
|
|
|
|
|
|
|
|
|
|
This PEP describes a mechanism for adding metadata to Python distributions.
|
|
|
|
|
It includes specifics of the field names, and their semantics and
|
|
|
|
|
usage.
|
|
|
|
|
|
2013-02-17 04:43:54 -05:00
|
|
|
|
This document specifies version 2.0 of the metadata format.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Version 1.0 is specified in PEP 241.
|
|
|
|
|
Version 1.1 is specified in PEP 314.
|
|
|
|
|
Version 1.2 is specified in PEP 345.
|
|
|
|
|
|
2013-02-17 04:43:54 -05:00
|
|
|
|
Version 2.0 of the metadata format adds fields designed to make
|
2013-01-14 21:44:40 -05:00
|
|
|
|
third-party packaging of Python Software easier and defines a formal
|
2013-02-04 09:00:45 -05:00
|
|
|
|
extension mechanism. It also adds support for optional features of
|
|
|
|
|
distributions and allows the description to be placed into a payload
|
|
|
|
|
section. Finally, this version addresses several issues with the
|
2013-02-09 07:40:18 -05:00
|
|
|
|
previous iteration of the standard version identification scheme.
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
Metadata files
|
2012-08-31 09:53:29 -04:00
|
|
|
|
==============
|
|
|
|
|
|
2012-09-08 11:53:56 -04:00
|
|
|
|
The syntax defined in this PEP is for use with Python distribution
|
|
|
|
|
metadata files. The file format is a simple UTF-8 encoded Key: value
|
2013-02-03 07:45:52 -05:00
|
|
|
|
format with case-insensitive keys and no maximum line length, optionally
|
|
|
|
|
followed by a blank line and a payload containing a description of the
|
|
|
|
|
distribution.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 07:45:52 -05:00
|
|
|
|
This format is parseable by the ``email`` module with an appropriate
|
2013-02-21 08:37:00 -05:00
|
|
|
|
``email.policy.Policy()`` (see `Appendix A`_). When ``metadata`` is a
|
|
|
|
|
Unicode string, ```email.parser.Parser().parsestr(metadata)`` is a
|
|
|
|
|
serviceable parser.
|
2012-10-18 21:06:24 -04:00
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
There are three standard locations for these metadata files:
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
* the ``PKG-INFO`` file included in the base directory of Python
|
|
|
|
|
source distribution archives (as created by the distutils ``sdist``
|
|
|
|
|
command)
|
2013-02-17 03:14:42 -05:00
|
|
|
|
* the ``{distribution}-{version}.dist-info/METADATA`` file in a ``wheel``
|
|
|
|
|
binary distribution archive (as described in PEP 425, or a later version
|
|
|
|
|
of that specification)
|
|
|
|
|
* the ``{distribution}-{version}.dist-info/METADATA`` files in a local
|
|
|
|
|
Python installation database (as described in PEP 376, or a later version
|
|
|
|
|
of that specification)
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2012-10-20 22:44:40 -04:00
|
|
|
|
Other tools involved in Python distribution may also use this format.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Encoding
|
|
|
|
|
========
|
|
|
|
|
|
2013-02-17 04:43:54 -05:00
|
|
|
|
Metadata 2.0 files are UTF-8 with the restriction that keys must be
|
2012-09-15 07:51:35 -04:00
|
|
|
|
ASCII. Parser implementations should be aware that older versions of
|
|
|
|
|
the Metadata specification do not specify an encoding.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
Metadata header fields
|
2013-02-03 07:45:52 -05:00
|
|
|
|
=======================
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
This section specifies the names and semantics of each of the
|
2013-02-03 07:45:52 -05:00
|
|
|
|
supported fields in the metadata header.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-17 04:43:54 -05:00
|
|
|
|
In a single Metadata 2.0 file, fields marked with "(optional)" may occur
|
2012-10-28 17:45:03 -04:00
|
|
|
|
0 or 1 times. Fields marked with "(multiple use)" may be specified
|
|
|
|
|
0, 1 or more times. Only "Metadata-Version", "Name", "Version", and
|
2013-02-03 07:45:52 -05:00
|
|
|
|
"Summary" must appear exactly once.
|
|
|
|
|
|
|
|
|
|
The fields may appear in any order within the header section of the file.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Metadata-Version
|
2013-02-03 06:11:16 -05:00
|
|
|
|
----------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-17 04:43:54 -05:00
|
|
|
|
Version of the file format; "2.0" is the only legal value.
|
|
|
|
|
|
2013-02-18 07:02:45 -05:00
|
|
|
|
Automated tools consuming metadata should warn if ``Metadata-Version`` is
|
|
|
|
|
greater than the highest version they support, and must fail if
|
|
|
|
|
``Metadata-Version`` has a greater major version than the highest
|
|
|
|
|
version they support.
|
|
|
|
|
|
|
|
|
|
For broader compatibility, automated tools may choose to produce
|
|
|
|
|
distribution metadata using the lowest metadata version that includes
|
|
|
|
|
all of the needed fields.
|
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Example::
|
|
|
|
|
|
2013-02-17 04:43:54 -05:00
|
|
|
|
Metadata-Version: 2.0
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Name
|
2013-02-03 06:11:16 -05:00
|
|
|
|
----
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
The name of the distribution.
|
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
Name: BeagleVote
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Version
|
2013-02-03 06:11:16 -05:00
|
|
|
|
-------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
The distribution's public version identifier. Public versions are designed
|
|
|
|
|
for consumption by automated tools and are strictly ordered according
|
|
|
|
|
to a defined scheme. See `Version scheme`_ below.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
Version: 1.0a2
|
|
|
|
|
|
|
|
|
|
|
2012-10-22 12:16:04 -04:00
|
|
|
|
Summary
|
2013-02-03 06:11:16 -05:00
|
|
|
|
-------
|
2012-10-22 12:16:04 -04:00
|
|
|
|
|
|
|
|
|
A one-line summary of what the distribution does.
|
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
Summary: A module for collecting votes from beagles.
|
|
|
|
|
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
Private-Version (optional)
|
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
|
|
An arbitrary private version label. Private version labels are intended
|
|
|
|
|
for internal use by a project, and cannot be used in version specifiers.
|
|
|
|
|
See `Compatibility with other version schemes`_ below.
|
|
|
|
|
|
|
|
|
|
Examples::
|
|
|
|
|
|
|
|
|
|
Private-Version: 1.0.0-alpha.1
|
|
|
|
|
Private-Version: 1.3.7+build.11.e0f985a
|
|
|
|
|
Private-Version: v1.8.1.301.ga0df26f
|
|
|
|
|
Private-Version: 2013.02.17.dev123
|
|
|
|
|
|
|
|
|
|
|
2012-10-20 22:44:40 -04:00
|
|
|
|
Description (optional, deprecated)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
----------------------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-17 04:43:54 -05:00
|
|
|
|
Starting with Metadata 2.0, the recommended place for the description is in
|
2013-02-03 07:45:52 -05:00
|
|
|
|
the payload section of the document, after the last header. The description
|
|
|
|
|
does not need to be reformatted when it is included in the payload.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 07:45:52 -05:00
|
|
|
|
See `Describing the Distribution`_ for more information on the expected
|
|
|
|
|
contents of this field.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2012-10-20 22:44:40 -04:00
|
|
|
|
Since a line separator immediately followed by another line separator
|
2013-02-03 07:45:52 -05:00
|
|
|
|
indicates the end of the headers section, any line separators in a
|
|
|
|
|
``Description`` header field must be suffixed by whitespace to
|
|
|
|
|
indicate continuation.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 07:45:52 -05:00
|
|
|
|
It is an error to provide both a ``Description`` header and a metadata
|
|
|
|
|
payload.
|
2012-10-22 12:16:04 -04:00
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Keywords (optional)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
-------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
A list of additional whitespace separated keywords to be used to assist
|
|
|
|
|
searching for the distribution in a larger catalog.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
Keywords: dog puppy voting election
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Home-page (optional)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
--------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
A string containing the URL for the distribution's home page.
|
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
Home-page: http://www.example.com/~cschultz/bvote/
|
|
|
|
|
|
|
|
|
|
|
2012-10-22 12:16:04 -04:00
|
|
|
|
Download-URL (optional)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
-----------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
A string containing the URL from which this version of the distribution
|
|
|
|
|
can be downloaded. (This means that the URL can't be something like
|
|
|
|
|
".../BeagleVote-latest.tgz", but instead must be ".../BeagleVote-0.45.tgz".)
|
|
|
|
|
|
|
|
|
|
|
2013-02-03 06:21:13 -05:00
|
|
|
|
Project-URL (multiple use)
|
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
|
|
A string containing a label and a browsable URL for the project, separated
|
|
|
|
|
by the last occurrence of comma and space ", ".
|
|
|
|
|
|
|
|
|
|
The label consists of any permitted header text, including commas.
|
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
Bug, Issue Tracker, http://bitbucket.org/tarek/distribute/issues/
|
|
|
|
|
|
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Author (optional)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
-----------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
A string containing the author's name at a minimum; additional
|
|
|
|
|
contact information may be provided.
|
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
Author: C. Schultz, Universal Features Syndicate,
|
|
|
|
|
Los Angeles, CA <cschultz@peanuts.example.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Author-email (optional)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
-----------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2012-10-19 19:44:20 -04:00
|
|
|
|
A string containing the author's e-mail address. It contains a name
|
|
|
|
|
and e-mail address in the RFC 5322 recommended ``Address Specification``
|
|
|
|
|
format.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
Author-email: "C. Schultz" <cschultz@example.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Maintainer (optional)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
---------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
A string containing the maintainer's name at a minimum; additional
|
|
|
|
|
contact information may be provided.
|
|
|
|
|
|
|
|
|
|
Note that this field is intended for use when a project is being
|
|
|
|
|
maintained by someone other than the original author: it should be
|
|
|
|
|
omitted if it is identical to ``Author``.
|
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
Maintainer: C. Schultz, Universal Features Syndicate,
|
|
|
|
|
Los Angeles, CA <cschultz@peanuts.example.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Maintainer-email (optional)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
---------------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2012-10-19 19:44:20 -04:00
|
|
|
|
A string containing the maintainer's e-mail address. It has the same
|
|
|
|
|
format as ``Author-email``.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Note that this field is intended for use when a project is being
|
|
|
|
|
maintained by someone other than the original author: it should be
|
|
|
|
|
omitted if it is identical to ``Author-email``.
|
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
Maintainer-email: "C. Schultz" <cschultz@example.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
License (optional)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Text indicating the license covering the distribution where the license
|
|
|
|
|
is not a selection from the "License" Trove classifiers. See
|
|
|
|
|
"Classifier" below. This field may also be used to specify a
|
2012-10-19 19:44:20 -04:00
|
|
|
|
particular version of a license which is named via the ``Classifier``
|
2012-08-31 09:53:29 -04:00
|
|
|
|
field, or to indicate a variation or exception to such a license.
|
|
|
|
|
|
|
|
|
|
Examples::
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2012-10-20 22:44:40 -04:00
|
|
|
|
The full text of the license would normally be included in a separate
|
|
|
|
|
file.
|
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Classifier (multiple use)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
-------------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Each entry is a string giving a single classification value
|
|
|
|
|
for the distribution. Classifiers are described in PEP 301 [2].
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
`Environment markers`_ may be used with this field.
|
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Examples::
|
|
|
|
|
|
|
|
|
|
Classifier: Development Status :: 4 - Beta
|
|
|
|
|
Classifier: Environment :: Console (Text Based)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Provides-Dist (multiple use)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
----------------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2012-12-03 20:36:13 -05:00
|
|
|
|
Each entry contains a string naming a requirement that is satisfied by
|
2013-02-03 06:11:16 -05:00
|
|
|
|
installing this distribution. These strings must be of the form
|
|
|
|
|
``Name`` or ``Name (Version)``, following the formats of the corresponding
|
|
|
|
|
field definitions.
|
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
A distribution may provide additional names, e.g. to indicate that
|
2012-12-03 20:36:13 -05:00
|
|
|
|
multiple projects have been merged into and replaced by a single
|
|
|
|
|
distribution or to indicate that this project is a substitute for another.
|
2013-02-03 06:11:16 -05:00
|
|
|
|
For instance, distribute (a fork of setuptools) can include a
|
|
|
|
|
``Provides-Dist: setuptools`` entry to prevent the conflicting
|
|
|
|
|
package from being downloaded and installed when distribute is already
|
|
|
|
|
installed. A distribution that has been merged with another might
|
|
|
|
|
``Provides-Dist`` the obsolete name(s) to satisfy any projects that
|
|
|
|
|
require the obsolete distribution's name.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
A distribution may also provide a "virtual" project name, which does
|
|
|
|
|
not correspond to any separately-distributed project: such a name
|
|
|
|
|
might be used to indicate an abstract capability which could be supplied
|
|
|
|
|
by one of multiple projects. E.g., multiple projects might supply
|
|
|
|
|
RDBMS bindings for use by a given ORM: each project might declare
|
2013-02-03 06:11:16 -05:00
|
|
|
|
that it provides ``ExampleORM-somedb-bindings``, allowing other
|
|
|
|
|
projects to depend only on having at least one of them installed.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
A version declaration may be supplied and must follow the rules described
|
2013-02-09 07:40:18 -05:00
|
|
|
|
in `Version scheme`_. The distribution's version identifier will be implied
|
2012-08-31 09:53:29 -04:00
|
|
|
|
if none is specified.
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
`Environment markers`_ may be used with this field.
|
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Examples::
|
|
|
|
|
|
|
|
|
|
Provides-Dist: AnotherProject (3.4)
|
|
|
|
|
Provides-Dist: virtual_package
|
|
|
|
|
|
|
|
|
|
|
2013-02-03 06:21:13 -05:00
|
|
|
|
Provides-Extra (multiple use)
|
|
|
|
|
-----------------------------
|
|
|
|
|
|
|
|
|
|
A string containing the name of an optional feature. Must be printable
|
|
|
|
|
ASCII, not containing whitespace, comma (,), or square brackets [].
|
|
|
|
|
May be used to make a dependency conditional on whether the optional
|
|
|
|
|
feature has been requested.
|
|
|
|
|
|
|
|
|
|
See `Optional Features`_ for details on the use of this field.
|
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
Name: beaglevote
|
|
|
|
|
Provides-Extra: pdf
|
|
|
|
|
Requires-Dist: reportlab; extra == 'pdf'
|
|
|
|
|
Requires-Dist: nose; extra == 'test'
|
|
|
|
|
Requires-Dist: sphinx; extra == 'doc'
|
|
|
|
|
|
|
|
|
|
|
2013-01-14 21:44:40 -05:00
|
|
|
|
Obsoleted-By (optional)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
-----------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-01-14 21:44:40 -05:00
|
|
|
|
Indicates that this project is no longer being developed. The named
|
|
|
|
|
project provides a substitute or replacement.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-01-14 21:44:40 -05:00
|
|
|
|
A version declaration may be supplied and must follow the rules described
|
2013-02-04 07:55:22 -05:00
|
|
|
|
in `Version specifiers`_.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Possible uses for this field include handling project name changes and
|
|
|
|
|
project mergers.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Examples::
|
|
|
|
|
|
2013-01-14 21:44:40 -05:00
|
|
|
|
Name: BadName
|
|
|
|
|
Obsoleted-By: AcceptableName
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
Name: SeparateProject
|
|
|
|
|
Obsoleted-By: MergedProject (>=4.0.0)
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
|
2013-02-03 06:21:13 -05:00
|
|
|
|
Requires-Dist (multiple use)
|
|
|
|
|
----------------------------
|
|
|
|
|
|
|
|
|
|
Each entry contains a string naming some other distutils
|
|
|
|
|
project required by this distribution.
|
|
|
|
|
|
|
|
|
|
The format of a requirement string is identical to that of a distribution
|
|
|
|
|
name (e.g., as found in the ``Name:`` field) optionally followed by a
|
|
|
|
|
version declaration within parentheses.
|
|
|
|
|
|
|
|
|
|
The distribution names should correspond to names as found on the `Python
|
|
|
|
|
Package Index`_; often the same as, but distinct from, the module names
|
|
|
|
|
as accessed with ``import x``.
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
`Environment markers`_ may be used with this field.
|
|
|
|
|
|
2013-02-03 06:21:13 -05:00
|
|
|
|
Version declarations must follow the rules described in
|
2013-02-04 07:55:22 -05:00
|
|
|
|
`Version specifiers`_
|
2013-02-03 06:21:13 -05:00
|
|
|
|
|
|
|
|
|
Distributions may also depend on optional features of other distributions.
|
|
|
|
|
See `Optional Features`_ for details.
|
|
|
|
|
|
|
|
|
|
Examples::
|
|
|
|
|
|
|
|
|
|
Requires-Dist: pkginfo
|
|
|
|
|
Requires-Dist: PasteDeploy
|
|
|
|
|
Requires-Dist: zope.interface (>3.5.0)
|
|
|
|
|
|
|
|
|
|
Dependencies mentioned in ``Requires-Dist`` may be installed exclusively
|
|
|
|
|
at run time and are not guaranteed to be available when creating or
|
|
|
|
|
installing a package. If a dependency is needed during distribution
|
|
|
|
|
creation or installation *and* at run time, it should be listed under
|
|
|
|
|
both ``Requires-Dist`` and ``Setup-Requires-Dist``.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Setup-Requires-Dist (multiple use)
|
|
|
|
|
----------------------------------
|
|
|
|
|
|
|
|
|
|
Like ``Requires-Dist``, but names dependencies needed in order to build,
|
2013-02-11 22:49:33 -05:00
|
|
|
|
package or install the distribution -- in distutils, a dependency imported
|
|
|
|
|
by ``setup.py`` itself. Commonly used to bring in extra compiler support
|
|
|
|
|
or a package needed to generate a manifest from version control.
|
2013-02-03 06:21:13 -05:00
|
|
|
|
|
|
|
|
|
Examples::
|
|
|
|
|
|
|
|
|
|
Setup-Requires-Dist: custom_setup_command
|
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
Dependencies mentioned in ``Setup-Requires-Dist`` may be installed
|
|
|
|
|
exclusively for setup and are not guaranteed to be available at run time.
|
|
|
|
|
If a dependency is needed during distribution creation or installation
|
2013-02-03 06:21:13 -05:00
|
|
|
|
*and* at run time, it should be listed under both ``Requires-Dist`` and
|
|
|
|
|
``Setup-Requires-Dist``.
|
|
|
|
|
|
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Requires-Python (multiple use)
|
|
|
|
|
------------------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
This field specifies the Python version(s) that the distribution is
|
|
|
|
|
guaranteed to be compatible with.
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
`Environment markers`_ may be used with this field.
|
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
Version declarations must be in the format specified in
|
|
|
|
|
`Version specifiers`_.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Examples::
|
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
Requires-Python: 3.2
|
|
|
|
|
Requires-Python: >3.1
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Requires-Python: >=2.3.4
|
|
|
|
|
Requires-Python: >=2.5,<2.7
|
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
If specified multiple times, the Python version must satisfy all such
|
|
|
|
|
constraints to be considered compatible. This is most useful in combination
|
|
|
|
|
with appropriate `Environment markers`_.
|
|
|
|
|
|
|
|
|
|
For example, if a feature was initially introduced to Python as a
|
|
|
|
|
Unix-specific addition, and then Windows support was added in the
|
|
|
|
|
subsequent release, this could be indicated with the following pair
|
|
|
|
|
of entries::
|
|
|
|
|
|
|
|
|
|
Requires-Python: >= 3.1
|
|
|
|
|
Requires-Python: >= 3.2; sys.platform == 'win32'
|
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Requires-External (multiple use)
|
2013-02-03 06:11:16 -05:00
|
|
|
|
--------------------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Each entry contains a string describing some dependency in the
|
|
|
|
|
system that the distribution is to be used. This field is intended to
|
|
|
|
|
serve as a hint to downstream project maintainers, and has no
|
|
|
|
|
semantics which are meaningful to the ``distutils`` distribution.
|
|
|
|
|
|
|
|
|
|
The format of a requirement string is a name of an external
|
|
|
|
|
dependency, optionally followed by a version declaration within
|
|
|
|
|
parentheses.
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
`Environment markers`_ may be used with this field.
|
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Because they refer to non-Python software releases, version identifiers
|
2012-08-31 09:53:29 -04:00
|
|
|
|
for this field are **not** required to conform to the format
|
2013-02-04 07:55:22 -05:00
|
|
|
|
described in `Version scheme`_: they should correspond to the
|
2012-08-31 09:53:29 -04:00
|
|
|
|
version scheme used by the external dependency.
|
|
|
|
|
|
2013-01-28 22:53:04 -05:00
|
|
|
|
Notice that there is no particular rule on the strings to be used.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
Examples::
|
|
|
|
|
|
|
|
|
|
Requires-External: C
|
|
|
|
|
Requires-External: libpng (>=1.5)
|
|
|
|
|
|
|
|
|
|
|
2013-02-03 06:21:13 -05:00
|
|
|
|
Platform (multiple use)
|
|
|
|
|
-----------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:21:13 -05:00
|
|
|
|
A Platform specification describing an operating system supported by
|
|
|
|
|
the distribution which is not listed in the "Operating System" Trove
|
|
|
|
|
classifiers. See `Classifier`__ above.
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2013-02-03 06:21:13 -05:00
|
|
|
|
__ `Classifier (multiple use)`_
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:21:13 -05:00
|
|
|
|
Examples::
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:21:13 -05:00
|
|
|
|
Platform: ObscureUnix
|
|
|
|
|
Platform: RareDOS
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
|
2013-02-03 06:21:13 -05:00
|
|
|
|
Supported-Platform (multiple use)
|
|
|
|
|
---------------------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:21:13 -05:00
|
|
|
|
Binary distributions containing a metadata file will use the
|
|
|
|
|
Supported-Platform field in their metadata to specify the OS and
|
|
|
|
|
CPU for which the binary distribution was compiled. The semantics of
|
|
|
|
|
the Supported-Platform field are not specified in this PEP.
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Example::
|
|
|
|
|
|
2013-02-03 06:21:13 -05:00
|
|
|
|
Supported-Platform: RedHat 7.2
|
|
|
|
|
Supported-Platform: i386-win32-2791
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Extension (multiple use)
|
|
|
|
|
------------------------
|
|
|
|
|
|
|
|
|
|
An ASCII string, not containing whitespace or the ``/`` character, that
|
|
|
|
|
indicates the presence of extended metadata. The additional fields
|
|
|
|
|
defined by the extension are then prefixed with the name of the extension
|
|
|
|
|
and the ``/`` character.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
For example::
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Extension: Chili
|
|
|
|
|
Chili/Type: Poblano
|
|
|
|
|
Chili/Heat: Mild
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
To avoid name conflicts, it is recommended that distribution names be used
|
|
|
|
|
to identify metadata extensions. This practice will also make it easier to
|
|
|
|
|
find authoritative documentation for metadata extensions.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
As the order of the metadata headers is not constrained, the
|
|
|
|
|
``Extension: Chili`` field may appear before or after the corresponding
|
|
|
|
|
extension fields ``Chili/Type:`` etc.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Values in extension fields must still respect the general formatting
|
|
|
|
|
requirements for metadata headers.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
A bare ``Extension: Name`` entry with no corresponding extension fields is
|
|
|
|
|
permitted. It may, for example, indicate the expected presence of an
|
|
|
|
|
additional metadata file rather than the presence of extension fields.
|
|
|
|
|
|
|
|
|
|
An extension field with no corresponding ``Extension: Name`` entry is an
|
|
|
|
|
error.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
Describing the distribution
|
2013-02-03 07:45:52 -05:00
|
|
|
|
===========================
|
|
|
|
|
|
|
|
|
|
The distribution metadata should include a longer description of the
|
|
|
|
|
distribution that may run to several paragraphs. Software that deals
|
|
|
|
|
with metadata should not assume any maximum size for the description.
|
|
|
|
|
|
|
|
|
|
The recommended location for the description is in the metadata payload,
|
|
|
|
|
separated from the header fields by at least one completely blank line
|
|
|
|
|
(that is, two successive line separators with no other characters
|
|
|
|
|
between them, not even whitespace).
|
|
|
|
|
|
|
|
|
|
Alternatively, the description may be provided in the `Description`__
|
|
|
|
|
metadata header field. Providing both a ``Description`` field and a
|
|
|
|
|
payload is an error.
|
|
|
|
|
|
|
|
|
|
__ `Description (optional, deprecated)`_
|
|
|
|
|
|
|
|
|
|
The distribution description can be written using reStructuredText
|
|
|
|
|
markup [1]_. For programs that work with the metadata, supporting
|
|
|
|
|
markup is optional; programs may also display the contents of the
|
|
|
|
|
field as plain text without any special formatting. This means that
|
|
|
|
|
authors should be conservative in the markup they use.
|
|
|
|
|
|
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
Version scheme
|
2013-02-03 06:11:16 -05:00
|
|
|
|
==============
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
Public version identifiers must comply with the following scheme::
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
N[.N]+[{a|b|c|rc}N][.postN][.devN]
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Version identifiers which do not comply with this scheme are an error.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
Version identifiers must not include leading or trailing whitespace.
|
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Any given version will be a "release", "pre-release", "post-release" or
|
|
|
|
|
"developmental release" as defined in the following sections.
|
|
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
|
|
Some hard to read version identifiers are permitted by this scheme
|
|
|
|
|
in order to better accommodate the wide range of versioning practices
|
|
|
|
|
across existing public and private Python projects.
|
|
|
|
|
|
|
|
|
|
Accordingly, some of the versioning practices which are technically
|
|
|
|
|
permitted by the PEP are strongly discouraged for new projects. Where
|
|
|
|
|
this is the case, the relevant details are noted in the following
|
|
|
|
|
sections.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Releases
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
A release number is a version identifier that consists solely of one or
|
|
|
|
|
more non-negative integer values, separated by dots::
|
|
|
|
|
|
|
|
|
|
N[.N]+
|
|
|
|
|
|
|
|
|
|
Releases within a project must be numbered in a consistently increasing
|
|
|
|
|
fashion. Ordering considers the numeric value of each component
|
|
|
|
|
in turn, with "component does not exist" sorted ahead of all numeric
|
|
|
|
|
values.
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
Date based release numbers are explicitly excluded from compatibility with
|
|
|
|
|
this scheme, as they hinder automatic translation to other versioning
|
|
|
|
|
schemes, as well as preventing the adoption of semantic versioning without
|
|
|
|
|
changing the name of the project. Accordingly, a leading release component
|
|
|
|
|
greater than or equal to ``1980`` is an error.
|
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
While any number of additional components after the first are permitted
|
|
|
|
|
under this scheme, the most common variants are to use two components
|
|
|
|
|
("major.minor") or three components ("major.minor.micro").
|
|
|
|
|
|
|
|
|
|
For example::
|
|
|
|
|
|
|
|
|
|
0.9
|
|
|
|
|
0.9.1
|
|
|
|
|
0.9.2
|
|
|
|
|
...
|
|
|
|
|
0.9.10
|
|
|
|
|
0.9.11
|
|
|
|
|
1.0
|
|
|
|
|
1.0.1
|
|
|
|
|
1.1
|
|
|
|
|
2.0
|
|
|
|
|
2.0.1
|
|
|
|
|
|
|
|
|
|
A release series is any set of release numbers that start with a common
|
|
|
|
|
prefix. For example, ``3.3.1``, ``3.3.5`` and ``3.3.9.45`` are all
|
|
|
|
|
part of the ``3.3`` release series.
|
|
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
|
|
Using both ``X.Y`` and ``X.Y.0`` as distinct release numbers within the
|
|
|
|
|
scope of a single release series is strongly discouraged, as it makes the
|
|
|
|
|
version ordering ambiguous for human readers. Automated tools should
|
|
|
|
|
either treat this case as an error, or else interpret an ``X.Y.0``
|
|
|
|
|
release as coming *after* the corresponding ``X.Y`` release.
|
|
|
|
|
|
|
|
|
|
The recommended practice is to always use release numbers of a consistent
|
|
|
|
|
length (that is, always include the trailing ``.0``). An acceptable
|
|
|
|
|
alternative is to consistently omit the trailing ``.0``. The example
|
|
|
|
|
above shows both styles, always including the ``.0`` at the second
|
|
|
|
|
level and consistently omitting it at the third level.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Pre-releases
|
|
|
|
|
------------
|
|
|
|
|
|
|
|
|
|
Some projects use an "alpha, beta, release candidate" pre-release cycle to
|
|
|
|
|
support testing by their users prior to a full release.
|
|
|
|
|
|
|
|
|
|
If used as part of a project's development cycle, these pre-releases are
|
|
|
|
|
indicated by a suffix appended directly to the last component of the
|
|
|
|
|
release number::
|
|
|
|
|
|
|
|
|
|
X.YaN # Alpha release
|
|
|
|
|
X.YbN # Beta release
|
|
|
|
|
X.YcN # Release candidate (alternative notation: X.YrcN)
|
|
|
|
|
X.Y # Full release
|
|
|
|
|
|
|
|
|
|
The pre-release suffix consists of an alphabetical identifier for the
|
|
|
|
|
pre-release phase, along with a non-negative integer value. Pre-releases for
|
|
|
|
|
a given release are ordered first by phase (alpha, beta, release candidate)
|
|
|
|
|
and then by the numerical component within that phase.
|
|
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
|
|
Using both ``c`` and ``rc`` to identify release candidates within
|
|
|
|
|
the scope of a single release is strongly discouraged, as it makes the
|
|
|
|
|
version ordering ambiguous for human readers. Automated tools should
|
|
|
|
|
either treat this case as an error, or else interpret all ``rc`` versions
|
|
|
|
|
as coming after all ``c`` versions (that is, ``rc1`` indicates a later
|
|
|
|
|
version than ``c2``).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Post-releases
|
|
|
|
|
-------------
|
|
|
|
|
|
|
|
|
|
Some projects use post-releases to address minor errors in a release that
|
|
|
|
|
do not affect the distributed software (for example, correcting an error
|
|
|
|
|
in the release notes).
|
|
|
|
|
|
|
|
|
|
If used as part of a project's development cycle, these post-releases are
|
|
|
|
|
indicated by a suffix appended directly to the last component of the
|
|
|
|
|
release number::
|
|
|
|
|
|
|
|
|
|
X.Y.postN # Post-release
|
|
|
|
|
|
|
|
|
|
The post-release suffix consists of the string ``.post``, followed by a
|
|
|
|
|
non-negative integer value. Post-releases are ordered by their
|
|
|
|
|
numerical component, immediately following the corresponding release,
|
|
|
|
|
and ahead of any subsequent release.
|
|
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
|
|
The use of post-releases to publish maintenance releases containing
|
|
|
|
|
actual bug fixes is strongly discouraged. In general, it is better
|
|
|
|
|
to use a longer release number and increment the final component
|
|
|
|
|
for each maintenance release.
|
|
|
|
|
|
|
|
|
|
Post-releases are also permitted for pre-releases::
|
|
|
|
|
|
|
|
|
|
X.YaN.postM # Post-release of an alpha release
|
|
|
|
|
X.YbN.postM # Post-release of a beta release
|
|
|
|
|
X.YcN.postM # Post-release of a release candidate
|
|
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
|
|
Creating post-releases of pre-releases is strongly discouraged, as
|
|
|
|
|
it makes the version identifier difficult to parse for human readers.
|
|
|
|
|
In general, it is substantially clearer to simply create a new
|
|
|
|
|
pre-release by incrementing the numeric component.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Developmental releases
|
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
|
|
Some projects make regular developmental releases, and system packagers
|
|
|
|
|
(especially for Linux distributions) may wish to create early releases
|
|
|
|
|
which do not conflict with later project releases.
|
|
|
|
|
|
|
|
|
|
If used as part of a project's development cycle, these developmental
|
|
|
|
|
releases are indicated by a suffix appended directly to the last
|
|
|
|
|
component of the release number::
|
|
|
|
|
|
|
|
|
|
X.Y.devN # Developmental release
|
|
|
|
|
|
|
|
|
|
The developmental release suffix consists of the string ``.dev``,
|
|
|
|
|
followed by a non-negative integer value. Developmental releases are ordered
|
|
|
|
|
by their numerical component, immediately before the corresponding release
|
|
|
|
|
(and before any pre-releases), and following any previous release.
|
2013-01-28 22:53:04 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Developmental releases are also permitted for pre-releases and
|
|
|
|
|
post-releases::
|
2013-01-28 22:53:04 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
X.YaN.devM # Developmental release of an alpha release
|
|
|
|
|
X.YbN.devM # Developmental release of a beta release
|
|
|
|
|
X.YcN.devM # Developmental release of a release candidate
|
|
|
|
|
X.Y.postN.devM # Developmental release of a post-release
|
|
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
|
|
Creating developmental releases of pre-releases is strongly
|
|
|
|
|
discouraged, as it makes the version identifier difficult to parse for
|
|
|
|
|
human readers. In general, it is substantially clearer to simply create
|
2013-02-09 08:29:27 -05:00
|
|
|
|
additional pre-releases by incrementing the numeric component.
|
2013-02-09 07:40:18 -05:00
|
|
|
|
|
2013-02-09 08:28:20 -05:00
|
|
|
|
Developmental releases of post-releases are also strongly discouraged,
|
2013-02-09 07:40:18 -05:00
|
|
|
|
but they may be appropriate for projects which use the post-release
|
|
|
|
|
notation for full maintenance releases which may include code changes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Examples of compliant version schemes
|
|
|
|
|
-------------------------------------
|
|
|
|
|
|
|
|
|
|
The standard version scheme is designed to encompass a wide range of
|
|
|
|
|
identification practices across public and private Python projects. In
|
|
|
|
|
practice, a single project attempting to use the full flexibility offered
|
|
|
|
|
by the scheme would create a situation where human users had difficulty
|
|
|
|
|
figuring out the relative order of versions, even though the rules above
|
|
|
|
|
ensure all compliant tools will order them consistently.
|
|
|
|
|
|
|
|
|
|
The following examples illustrate a small selection of the different
|
|
|
|
|
approaches projects may choose to identify their releases, while still
|
|
|
|
|
ensuring that the "latest release" and the "latest stable release" can
|
|
|
|
|
be easily determined, both by human users and automated tools.
|
|
|
|
|
|
|
|
|
|
Simple "major.minor" versioning::
|
|
|
|
|
|
|
|
|
|
0.1
|
|
|
|
|
0.2
|
|
|
|
|
0.3
|
|
|
|
|
1.0
|
|
|
|
|
1.1
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
Simple "major.minor.micro" versioning::
|
|
|
|
|
|
|
|
|
|
1.1.0
|
|
|
|
|
1.1.1
|
|
|
|
|
1.1.2
|
|
|
|
|
1.2.0
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
"major.minor" versioning with alpha, beta and release candidate
|
|
|
|
|
pre-releases::
|
|
|
|
|
|
|
|
|
|
0.9
|
|
|
|
|
1.0a1
|
|
|
|
|
1.0a2
|
|
|
|
|
1.0b1
|
|
|
|
|
1.0c1
|
|
|
|
|
1.0
|
|
|
|
|
1.1a1
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
"major.minor" versioning with developmental releases, release candidates
|
|
|
|
|
and post-releases for minor corrections::
|
|
|
|
|
|
|
|
|
|
0.9
|
|
|
|
|
1.0.dev1
|
|
|
|
|
1.0.dev2
|
|
|
|
|
1.0.dev3
|
|
|
|
|
1.0.dev4
|
|
|
|
|
1.0rc1
|
|
|
|
|
1.0rc2
|
|
|
|
|
1.0
|
|
|
|
|
1.0.post1
|
|
|
|
|
1.1.dev1
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Summary of permitted suffixes and relative ordering
|
|
|
|
|
---------------------------------------------------
|
|
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
|
|
This section is intended primarily for authors of tools that
|
|
|
|
|
automatically process distribution metadata, rather than authors
|
|
|
|
|
of Python distributions deciding on a versioning scheme.
|
|
|
|
|
|
|
|
|
|
The numeric release component of version identifiers should be sorted in
|
|
|
|
|
the same order as Python's tuple sorting when the release number is
|
|
|
|
|
parsed as follows::
|
|
|
|
|
|
|
|
|
|
tuple(map(int, release_number.split(".")))
|
|
|
|
|
|
|
|
|
|
Within a numeric release (``1.0``, ``2.7.3``), the following suffixes
|
|
|
|
|
are permitted and are ordered as shown::
|
2013-01-28 22:53:04 -05:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
.devN, aN, bN, cN, rcN, <no suffix>, .postN
|
2013-01-28 22:53:04 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Note that `rc` will always sort after `c` (regardless of the numeric
|
|
|
|
|
component) although they are semantically equivalent. Tools are free to
|
|
|
|
|
reject this case as ambiguous and remain in compliance with the PEP.
|
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Within an alpha (``1.0a1``), beta (``1.0b1``), or release candidate
|
2013-02-09 07:40:18 -05:00
|
|
|
|
(``1.0c1``, ``1.0rc1``), the following suffixes are permitted and are
|
|
|
|
|
ordered as shown::
|
2013-01-28 22:53:04 -05:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
.devN, <no suffix>, .postN
|
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Within a post-release (``1.0.post1``), the following suffixes are permitted
|
|
|
|
|
and are ordered as shown::
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
devN, <no suffix>
|
|
|
|
|
|
|
|
|
|
Note that ``devN`` and ``postN`` must always be preceded by a dot, even
|
2013-02-03 07:45:52 -05:00
|
|
|
|
when used immediately following a numeric version (e.g. ``1.0.dev456``,
|
|
|
|
|
``1.0.post1``).
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
Within a given suffix, ordering is by the value of the numeric component.
|
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
The following example covers many of the possible combinations::
|
2013-02-03 07:45:52 -05:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
1.0.dev456
|
|
|
|
|
1.0a1
|
|
|
|
|
1.0a2.dev456
|
|
|
|
|
1.0a12.dev456
|
|
|
|
|
1.0a12
|
|
|
|
|
1.0b1.dev456
|
|
|
|
|
1.0b2
|
2013-02-09 07:40:18 -05:00
|
|
|
|
1.0b2.post345.dev456
|
2013-02-03 06:11:16 -05:00
|
|
|
|
1.0b2.post345
|
|
|
|
|
1.0c1.dev456
|
|
|
|
|
1.0c1
|
|
|
|
|
1.0
|
|
|
|
|
1.0.post456.dev34
|
|
|
|
|
1.0.post456
|
2013-02-03 07:45:52 -05:00
|
|
|
|
1.1.dev1
|
2013-01-31 11:36:46 -05:00
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Version ordering across different metadata versions
|
|
|
|
|
---------------------------------------------------
|
2013-02-08 23:12:01 -05:00
|
|
|
|
|
|
|
|
|
Metadata v1.0 (PEP 241) and metadata v1.1 (PEP 314) do not
|
2013-02-09 07:40:18 -05:00
|
|
|
|
specify a standard version identification or ordering scheme. This PEP does
|
2013-02-04 07:55:22 -05:00
|
|
|
|
not mandate any particular approach to handling such versions, but
|
2013-02-09 07:40:18 -05:00
|
|
|
|
acknowledges that the de facto standard for ordering them is
|
2013-02-04 07:55:22 -05:00
|
|
|
|
the scheme used by the ``pkg_resources`` component of ``setuptools``.
|
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Software that automatically processes distribution metadata may either
|
|
|
|
|
treat non-compliant version identifiers as an error, or attempt to normalize
|
|
|
|
|
them to the standard scheme. This means that projects using non-compliant
|
|
|
|
|
version identifiers may not be handled consistently across different tools,
|
|
|
|
|
even when correctly publishing the earlier metadata versions.
|
|
|
|
|
|
2013-02-09 09:28:52 -05:00
|
|
|
|
Distribution developers can help ensure consistent automated handling by
|
2013-02-09 07:40:18 -05:00
|
|
|
|
marking non-compliant versions as "hidden" on the Python Package Index
|
|
|
|
|
(removing them is generally undesirable, as users may be depending on
|
|
|
|
|
those specific versions being available).
|
|
|
|
|
|
2013-02-09 09:28:52 -05:00
|
|
|
|
Distribution users may also wish to remove non-compliant versions from any
|
2013-02-09 07:40:18 -05:00
|
|
|
|
private package indexes they control.
|
|
|
|
|
|
|
|
|
|
For metadata v1.2 (PEP 345), the version ordering described in this PEP
|
|
|
|
|
should be used in preference to the one defined in PEP 386.
|
2013-02-04 07:55:22 -05:00
|
|
|
|
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
Compatibility with other version schemes
|
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
|
|
Some projects may choose to use a version scheme which requires
|
|
|
|
|
translation in order to comply with the public version scheme defined in
|
|
|
|
|
this PEP. In such cases, the `Private-Version`__ field can be used to
|
|
|
|
|
record the project specific version as an arbitrary label, while the
|
|
|
|
|
translated public version is given in the `Version`_ field.
|
|
|
|
|
|
|
|
|
|
__ `Private-Version (optional)`_
|
|
|
|
|
|
|
|
|
|
This allows automated distribution tools to provide consistently correct
|
|
|
|
|
ordering of published releases, while still allowing developers to use
|
|
|
|
|
the internal versioning scheme they prefer for their projects.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Semantic versioning
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
`Semantic versioning`_ is a popular version identification scheme that is
|
|
|
|
|
more prescriptive than this PEP regarding the significance of different
|
|
|
|
|
elements of a release number. Even if a project chooses not to abide by
|
|
|
|
|
the details of semantic versioning, the scheme is worth understanding as
|
|
|
|
|
it covers many of the issues that can arise when depending on other
|
|
|
|
|
distributions, and when publishing a distribution that others rely on.
|
|
|
|
|
|
|
|
|
|
The "Major.Minor.Patch" (described in this PEP as "major.minor.micro")
|
|
|
|
|
aspects of semantic versioning (clauses 1-9 in the 2.0.0-rc-1 specification)
|
|
|
|
|
are fully compatible with the version scheme defined in this PEP, and abiding
|
|
|
|
|
by these aspects is encouraged.
|
|
|
|
|
|
|
|
|
|
Semantic versions containing a hyphen (pre-releases - clause 10) or a
|
|
|
|
|
plus sign (builds - clause 11) are *not* compatible with this PEP
|
|
|
|
|
and are not permitted in the public `Version`_ field.
|
|
|
|
|
|
|
|
|
|
One possible mechanism to translate such private semantic versions to
|
|
|
|
|
compatible public versions is to use the ``.devN`` suffix to specify the
|
|
|
|
|
appropriate version order.
|
|
|
|
|
|
|
|
|
|
.. _Semantic versioning: http://semver.org/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DVCS based version labels
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Many build tools integrate with distributed version control systems like
|
|
|
|
|
Git and Mercurial in order to add an identifying hash to the version
|
|
|
|
|
identifier. As hashes cannot be ordered reliably such versions are not
|
|
|
|
|
permitted in the public `Version`_ field.
|
|
|
|
|
|
|
|
|
|
As with semantic versioning, the public ``.devN`` suffix may be used to
|
|
|
|
|
uniquely identify such releases for publication, while the private
|
|
|
|
|
version field is used to record the original version label.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date based versions
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
As with other incompatible version schemes, date based versions can be
|
|
|
|
|
stored in the ``Private-Version`` field. Translating them to a compliant
|
|
|
|
|
version is straightforward: the simplest approach is to subtract the year
|
|
|
|
|
of the first release from the major component in the release number.
|
|
|
|
|
|
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
Version specifiers
|
2012-08-31 09:53:29 -04:00
|
|
|
|
==================
|
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
A version specifier consists of a series of version clauses, separated by
|
|
|
|
|
commas. Each version clause consists of an optional comparison operator
|
2013-02-09 07:40:18 -05:00
|
|
|
|
followed by a version identifier. For example::
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
0.9, >= 1.0, != 1.3.4, < 2.0
|
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Each version identifier must be in the standard format described in
|
2013-02-04 07:55:22 -05:00
|
|
|
|
`Version scheme`_.
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
The comma (",") is equivalent to a logical **and** operator.
|
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Comparison operators must be one of ``<``, ``>``, ``<=``, ``>=``, ``==``
|
2013-02-09 07:40:18 -05:00
|
|
|
|
or ``!=``.
|
2013-02-08 23:12:01 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
The ``==`` and ``!=`` operators are strict - in order to match, the
|
|
|
|
|
version supplied must exactly match the specified version, with no
|
|
|
|
|
additional trailing suffix.
|
2013-02-08 23:12:01 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
However, when no comparison operator is provided along with a version
|
|
|
|
|
identifier ``V``, it is equivalent to using the following pair of version
|
|
|
|
|
clauses::
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
>= V, < V+1
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
where ``V+1`` is the next version after ``V``, as determined by
|
|
|
|
|
incrementing the last numeric component in ``V`` (for example, if
|
|
|
|
|
``V == 1.0a3``, then ``V+1 == 1.0a4``, while if ``V == 1.0``, then
|
|
|
|
|
``V+1 == 1.1``).
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
This approach makes it easy to depend on a particular release series
|
|
|
|
|
simply by naming it in a version specifier, without requiring any
|
|
|
|
|
additional annotation. For example, the following pairs of version
|
|
|
|
|
specifiers are equivalent::
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
2
|
|
|
|
|
>= 2, < 3
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
3.3
|
|
|
|
|
>= 3.3, < 3.4
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Whitespace between a conditional operator and the following version
|
|
|
|
|
identifier is optional, as is the whitespace around the commas.
|
|
|
|
|
|
|
|
|
|
Pre-releases of any kind, including developmental releases, are implicitly
|
|
|
|
|
excluded from all version specifiers, *unless* a pre-release or developmental
|
|
|
|
|
developmental release is explicitly mentioned in one of the clauses. For
|
|
|
|
|
example, this specifier implicitly excludes all pre-releases and development
|
|
|
|
|
releases of later versions::
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
>= 1.0
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 07:45:52 -05:00
|
|
|
|
While these specifiers would include them::
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
>= 1.0a1
|
|
|
|
|
>= 1.0c1
|
|
|
|
|
>= 1.0, != 1.0b2
|
|
|
|
|
>= 1.0, < 2.0.dev123
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Dependency resolution tools should use the above rules by default, but
|
|
|
|
|
should also allow users to request the following alternative behaviours:
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
* accept already installed pre-releases for all version specifiers
|
2013-02-03 07:45:52 -05:00
|
|
|
|
* retrieve and install available pre-releases for all version specifiers
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2013-02-09 08:00:44 -05:00
|
|
|
|
Dependency resolution tools may also allow the above behaviour to be
|
|
|
|
|
controlled on a per-distribution basis.
|
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Post-releases and purely numeric releases receive no special treatment -
|
2013-02-03 06:11:16 -05:00
|
|
|
|
they are always included unless explicitly excluded.
|
|
|
|
|
|
|
|
|
|
Given the above rules, projects which include the ``.0`` suffix for the
|
|
|
|
|
first release in a series, such as ``2.5.0``, can easily refer specifically
|
|
|
|
|
to that version with the clause ``2.5.0``, while the clause ``2.5`` refers
|
|
|
|
|
to that entire series. Projects which omit the ".0" suffix for the first
|
|
|
|
|
release of a series, by using a version string like ``2.5`` rather than
|
2013-02-04 07:55:22 -05:00
|
|
|
|
``2.5.0``, will need to use an explicit clause like ``>= 2.5, < 2.5.1`` to
|
2013-02-03 06:11:16 -05:00
|
|
|
|
refer specifically to that initial release.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Some examples:
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
* ``Requires-Dist: zope.interface (3.1)``: any version that starts with 3.1,
|
2013-02-03 06:11:16 -05:00
|
|
|
|
excluding pre-releases.
|
2013-02-09 07:40:18 -05:00
|
|
|
|
* ``Requires-Dist: zope.interface (==3.1)``: equivalent to ``Requires-Dist:
|
2012-08-31 09:53:29 -04:00
|
|
|
|
zope.interface (3.1)``.
|
2013-02-09 07:40:18 -05:00
|
|
|
|
* ``Requires-Dist: zope.interface (3.1.0)``: any version that starts with
|
2013-02-03 06:11:16 -05:00
|
|
|
|
3.1.0, excluding pre-releases. Since that particular project doesn't
|
2012-08-31 09:53:29 -04:00
|
|
|
|
use more than 3 digits, it also means "only the 3.1.0 release".
|
2013-02-09 07:40:18 -05:00
|
|
|
|
* ``Requires-Python: 3``: Any Python 3 version, excluding pre-releases.
|
|
|
|
|
* ``Requires-Python: >=2.6,<3``: Any version of Python 2.6 or 2.7, including
|
|
|
|
|
post-releases (if they were used for Python). It excludes pre releases of
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Python 3.
|
2013-02-09 07:40:18 -05:00
|
|
|
|
* ``Requires-Python: 2.6.2``: Equivalent to ">=2.6.2,<2.6.3". So this includes
|
2012-08-31 09:53:29 -04:00
|
|
|
|
only Python 2.6.2. Of course, if Python was numbered with 4 digits, it would
|
2013-02-03 06:11:16 -05:00
|
|
|
|
include all versions of the 2.6.2 series, excluding pre-releases.
|
2013-02-09 07:40:18 -05:00
|
|
|
|
* ``Requires-Python: 2.5``: Equivalent to ">=2.5,<2.6".
|
|
|
|
|
* ``Requires-Dist: zope.interface (3.1,!=3.1.3)``: any version that starts
|
|
|
|
|
with 3.1, excluding pre-releases of 3.1 *and* excluding any version that
|
2012-08-31 09:53:29 -04:00
|
|
|
|
starts with "3.1.3". For this particular project, this means: "any version
|
|
|
|
|
of the 3.1 series but not 3.1.3". This is equivalent to:
|
|
|
|
|
">=3.1,!=3.1.3,<3.2".
|
2013-02-09 07:40:18 -05:00
|
|
|
|
* ``Requires-Python: >=3.3a1``: Any version of Python 3.3+, including
|
2013-02-03 06:11:16 -05:00
|
|
|
|
pre-releases like 3.4a1.
|
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
Depending on distributions that use non-compliant version schemes
|
|
|
|
|
-----------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
A distribution using this version of the metadata standard may need to depend
|
|
|
|
|
on another distribution using an earlier version of the metadata standard
|
|
|
|
|
and a non-compliant versioning scheme.
|
|
|
|
|
|
|
|
|
|
The normal ``Requires-Dist`` and ``Setup-Requires-Dist`` fields can be used
|
|
|
|
|
for such dependencies, so long as the dependency itself can be expressed
|
|
|
|
|
using a compliant version specifier.
|
|
|
|
|
|
|
|
|
|
For more exotic dependencies, a metadata extension would be needed in order
|
|
|
|
|
to express the dependencies accurately while still obeying the restrictions
|
|
|
|
|
on standard version specifiers. The ``Requires-External`` field may also
|
|
|
|
|
be used, but would not be as amenable to automatic processing.
|
|
|
|
|
|
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Environment markers
|
|
|
|
|
===================
|
|
|
|
|
|
|
|
|
|
An **environment marker** is a marker that can be added at the end of a
|
|
|
|
|
field after a semi-colon (";"), to add a condition about the execution
|
|
|
|
|
environment.
|
|
|
|
|
|
|
|
|
|
Here are some example of fields using such markers::
|
|
|
|
|
|
|
|
|
|
Requires-Dist: pywin32 (>1.0); 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
|
|
|
|
|
|
2012-09-15 07:51:35 -04:00
|
|
|
|
The micro-language behind this is a simple subset of Python: it compares
|
|
|
|
|
only strings, with the ``==`` and ``in`` operators (and their opposites),
|
2013-02-03 06:11:16 -05:00
|
|
|
|
and with the ability to combine expressions. Parentheses are supported
|
2012-09-15 07:51:35 -04:00
|
|
|
|
for grouping.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
The pseudo-grammar is ::
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
MARKER: EXPR [(and|or) EXPR]*
|
|
|
|
|
EXPR: ("(" MARKER ")") | (SUBEXPR [(in|==|!=|not in) SUBEXPR])
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
where ``SUBEXPR`` belongs to any of the following (the details after the
|
|
|
|
|
colon in each entry define the value represented by that subexpression):
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
* ``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()
|
|
|
|
|
* ``extra``: (name of requested feature) or None
|
|
|
|
|
* ``'text'``: a free string, like ``'2.4'``, or ``'win32'``
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
Notice that ``in`` and ``not in`` are restricted to strings, meaning that it
|
|
|
|
|
is not possible to use other sequences like tuples or lists on the right
|
|
|
|
|
side.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
|
|
|
|
The fields that benefit from this marker are:
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
* ``Requires-Python``
|
|
|
|
|
* ``Requires-External``
|
|
|
|
|
* ``Requires-Dist``
|
|
|
|
|
* ``Provides-Dist``
|
|
|
|
|
* ``Classifier``
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
Optional features
|
|
|
|
|
=================
|
|
|
|
|
|
|
|
|
|
Distributions may use the ``Provides-Extra`` field to declare additional
|
|
|
|
|
features that they provide. Environment markers may then be used to indicate
|
2013-02-11 22:37:10 -05:00
|
|
|
|
that particular dependencies are needed only when a particular optional
|
2013-02-03 06:11:16 -05:00
|
|
|
|
feature has been requested.
|
|
|
|
|
|
|
|
|
|
Other distributions then require an optional feature by placing it
|
|
|
|
|
inside square brackets after the distribution name when declaring the
|
|
|
|
|
dependency. Multiple features can be requisted by separating them with a
|
2013-02-03 07:45:52 -05:00
|
|
|
|
comma within the brackets.
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2013-02-11 22:37:10 -05:00
|
|
|
|
The full set of dependency requirements is then the union of the sets
|
|
|
|
|
created by first evaluating the `Requires-Dist` fields with `extra`
|
|
|
|
|
set to `None` and then to the name of each requested feature.
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
|
|
Requires-Dist: beaglevote[pdf]
|
|
|
|
|
-> requires beaglevote, reportlab at run time
|
|
|
|
|
|
|
|
|
|
Setup-Requires-Dist: beaglevote[test, doc]
|
|
|
|
|
-> requires beaglevote, sphinx, nose at setup time
|
|
|
|
|
|
|
|
|
|
It is legal to specify `Provides-Extra` without referencing it in any
|
|
|
|
|
`Requires-Dist`. It is an error to request a feature name that has
|
|
|
|
|
not been declared with `Provides-Extra`.
|
|
|
|
|
|
|
|
|
|
The following feature names are implicitly defined for all distributions:
|
|
|
|
|
|
|
|
|
|
- `test`: dependencies that are needed in order to run automated tests
|
|
|
|
|
- `doc`: dependencies that are needed in order to generate documentation
|
|
|
|
|
|
|
|
|
|
Listing these implicit features explicitly in a ``Provides-Extra`` field is
|
|
|
|
|
permitted, but not required.
|
|
|
|
|
|
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
Updating the metadata specification
|
2013-02-03 06:11:16 -05:00
|
|
|
|
===================================
|
|
|
|
|
|
|
|
|
|
The metadata specification may be updated with clarifications without
|
|
|
|
|
requiring a new PEP or a change to the metadata version.
|
|
|
|
|
|
|
|
|
|
Adding new features (other than through the extension mechanism), or
|
2013-02-03 07:45:52 -05:00
|
|
|
|
changing the meaning of existing fields, requires a new metadata version
|
2013-02-03 06:11:16 -05:00
|
|
|
|
defined in a new PEP.
|
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
Summary of differences from \PEP 345
|
2013-02-03 07:45:52 -05:00
|
|
|
|
====================================
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-17 04:43:54 -05:00
|
|
|
|
* Metadata-Version is now 2.0, with semantics specified for handling
|
|
|
|
|
version changes
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
* Most fields are now optional
|
|
|
|
|
|
|
|
|
|
* Explicit permission for in-place clarifications without releasing a new
|
|
|
|
|
version of the specification
|
|
|
|
|
|
2013-02-03 07:45:52 -05:00
|
|
|
|
* General reformatting of the PEP to make it easier to read
|
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
* Values are now expected to be UTF-8
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
* Changed the version scheme
|
|
|
|
|
|
|
|
|
|
* added the new ``Private-Version`` field
|
|
|
|
|
* changed the top level sort position of the ``.devN`` suffix
|
|
|
|
|
* allowed single value version numbers
|
|
|
|
|
* explicit exclusion of leading or trailing whitespace
|
|
|
|
|
* explicit criterion for the exclusion of date based versions
|
|
|
|
|
* incorporated the version scheme directly into the PEP
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
* Changed interpretation of version specifiers
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
* implicitly exclude pre-releases unless explicitly requested
|
|
|
|
|
* treat post releases the same way as unqualified releases
|
|
|
|
|
|
|
|
|
|
* Discuss ordering and dependencies across metadata versions
|
|
|
|
|
|
|
|
|
|
* Clarify use of parentheses for grouping in environment marker
|
|
|
|
|
pseudo-grammar
|
2013-02-04 07:55:22 -05:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
* Support for packaging, build and installation dependencies
|
|
|
|
|
|
|
|
|
|
* the new ``Setup-Requires-Dist`` field
|
|
|
|
|
|
|
|
|
|
* Optional feature mechanism
|
|
|
|
|
|
|
|
|
|
* the new ``Provides-Extra`` field
|
2013-02-11 22:37:10 -05:00
|
|
|
|
* ``extra`` expression defined for environment markers
|
|
|
|
|
* optional feature support in ``Requires-Dist``
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
* Metadata extension mechanism
|
|
|
|
|
|
|
|
|
|
* the new ``Extension`` field and extension specific fields
|
|
|
|
|
|
|
|
|
|
* Updated obsolescence mechanism
|
|
|
|
|
|
|
|
|
|
* the new ``Obsoleted-By`` field
|
|
|
|
|
* the ``Obsoletes-Dist`` field has been removed
|
|
|
|
|
|
|
|
|
|
* Simpler description format
|
|
|
|
|
|
|
|
|
|
* the ``Description`` field is now deprecated
|
|
|
|
|
* A payload (containing the description) may appear after the headers.
|
|
|
|
|
|
|
|
|
|
* Other changed fields:
|
|
|
|
|
|
|
|
|
|
- ``Requires-Python`` (explicitly flagged as multiple use)
|
|
|
|
|
- ``Project-URL`` (commas permitted in labels)
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
* Clarified fields:
|
2012-10-20 22:44:40 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
- ``Provides-Dist``
|
|
|
|
|
- ``Keywords``
|
2012-10-20 22:44:40 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
The rationale for major changes is given in the following sections.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
|
2013-02-17 04:43:54 -05:00
|
|
|
|
Metadata-Version semantics
|
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
|
|
The semantics of major and minor version increments are now specified,
|
|
|
|
|
and follow the same model as the format version semantics specified for
|
|
|
|
|
the wheel format in PEP 427: minor version increments must behave
|
|
|
|
|
reasonably when processed by a tool that only understand earlier metadata
|
|
|
|
|
versions with the same major version, while major version increments
|
|
|
|
|
may include changes that are not compatible with existing tools.
|
|
|
|
|
|
|
|
|
|
The major version number of the specification has been incremented
|
|
|
|
|
accordingly, as interpreting PEP 426 metadata in accordance with earlier
|
|
|
|
|
metadata specifications is unlikely to give the expected behaviour.
|
|
|
|
|
|
|
|
|
|
Whenever the major version number of the specification is incremented, it
|
2013-02-18 07:02:45 -05:00
|
|
|
|
is expected that deployment will take some time, as either metadata
|
|
|
|
|
consuming tools must be updated before other tools can safely start
|
|
|
|
|
producing the new format, or else the sdist and wheel formats, along with
|
|
|
|
|
the installation database definition, will need to be updated to support
|
|
|
|
|
provision of multiple versions of the metadata in parallel.
|
|
|
|
|
|
|
|
|
|
Existing tools won't abide by this guideline until they're updated to
|
|
|
|
|
support the new metadata standard, so the new semantics will first take
|
|
|
|
|
effect for a hypothetical 2.x -> 3.0 transition. For the 1.x -> 2.0
|
|
|
|
|
transition, it is recommended that tools continue to produce the
|
|
|
|
|
existing supplementary files (such as ``entry_points.txt``) in addition
|
|
|
|
|
to any equivalents specified using the new features of the standard
|
|
|
|
|
metadata format (including the formal extension mechanism).
|
2013-02-17 04:43:54 -05:00
|
|
|
|
|
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Standard encoding and other format clarifications
|
|
|
|
|
-------------------------------------------------
|
2012-10-22 12:16:04 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Several aspects of the file format, including the expected file encoding,
|
|
|
|
|
were underspecified in previous versions of the metadata standard. To
|
2013-02-09 07:40:18 -05:00
|
|
|
|
make it easier to develop interoperable tools, these details are now
|
|
|
|
|
explicitly specified.
|
2013-01-14 21:44:40 -05:00
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Changing the version scheme
|
|
|
|
|
---------------------------
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
The new ``Private-Version`` field is intended to make it clearer that the
|
|
|
|
|
constraints on public version identifiers are there primarily to aid in
|
|
|
|
|
the creation of reliable automated dependency analysis tools. Projects
|
|
|
|
|
are free to use whatever versioning scheme they like internally, so long
|
|
|
|
|
as they are able to translate it to something the dependency analysis tools
|
|
|
|
|
will understand.
|
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
The key change in the version scheme in this PEP relative to that in
|
|
|
|
|
PEP 386 is to sort top level developmental releases like ``X.Y.devN`` ahead
|
|
|
|
|
of alpha releases like ``X.Ya1``. This is a far more logical sort order, as
|
|
|
|
|
projects already using both development releases and alphas/betas/release
|
|
|
|
|
candidates do not want their developmental releases sorted in
|
2013-02-04 07:55:22 -05:00
|
|
|
|
between their release candidates and their full releases. There is no
|
|
|
|
|
rationale for using ``dev`` releases in that position rather than
|
|
|
|
|
merely creating additional release candidates.
|
|
|
|
|
|
|
|
|
|
The updated sort order also means the sorting of ``dev`` versions is now
|
|
|
|
|
consistent between the metadata standard and the pre-existing behaviour
|
|
|
|
|
of ``pkg_resources`` (and hence the behaviour of current installation
|
|
|
|
|
tools).
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
Making this change should make it easier for affected existing projects to
|
|
|
|
|
migrate to the latest version of the metadata standard.
|
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Another change to the version scheme is to allow single number
|
|
|
|
|
versions, similar to those used by non-Python projects like Mozilla
|
|
|
|
|
Firefox, Google Chrome and the Fedora Linux distribution. This is actually
|
|
|
|
|
expected to be more useful for version specifiers (allowing things like
|
|
|
|
|
the simple ``Requires-Python: 3`` rather than the more convoluted
|
|
|
|
|
``Requires-Python: >= 3.0, < 4``), but it is easier to allow it for both
|
|
|
|
|
version specifiers and release numbers, rather than splitting the
|
|
|
|
|
two definitions.
|
|
|
|
|
|
2013-02-17 03:14:42 -05:00
|
|
|
|
The exclusion of leading and trailing whitespace was made explicit after
|
|
|
|
|
a couple of projects with version identifiers differing only in a
|
|
|
|
|
trailing ``\n`` character were found on PyPI.
|
|
|
|
|
|
|
|
|
|
The exclusion of major release numbers that looks like dates was implied
|
|
|
|
|
by the overall text of PEP 386, but not clear in the definition of the
|
|
|
|
|
version scheme. This exclusion has been made clear in the definition of
|
|
|
|
|
the release component.
|
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
Finally, as the version scheme in use is dependent on the metadata
|
2013-02-03 06:11:16 -05:00
|
|
|
|
version, it was deemed simpler to merge the scheme definition directly into
|
2013-02-21 08:37:00 -05:00
|
|
|
|
this PEP rather than continuing to maintain it as a separate PEP.
|
|
|
|
|
|
|
|
|
|
`Appendix B` shows detailed results of an analysis of PyPI distribution
|
|
|
|
|
version information, as collected on 19th February, 2013. This analysis
|
|
|
|
|
compares the behaviour of the explicitly ordered version schemes defined in
|
|
|
|
|
this PEP and PEP 386 with the de facto standard defined by the behaviour
|
|
|
|
|
of setuptools. These metrics are useful, as the intent of both PEPs is to
|
|
|
|
|
follow existing setuptools behaviour as closely as is feasible, while
|
|
|
|
|
still throwing exceptions for unorderable versions (rather than trying
|
|
|
|
|
to guess an appropriate order as setuptools does).
|
|
|
|
|
|
|
|
|
|
Overall, the percentage of compatible distributions improves from 97.7%
|
|
|
|
|
with PEP 386 to 98.7% with this PEP. While the number of projects affected
|
|
|
|
|
in practice was small, some of the affected projects are in widespread use
|
|
|
|
|
(such as Pinax and selenium). The surprising ordering discrepancy also
|
|
|
|
|
concerned developers and acted as an unnecessary barrier to adoption of
|
|
|
|
|
the new metadata standard.
|
|
|
|
|
|
|
|
|
|
The data also shows that the pre-release sorting discrepancies are seen
|
|
|
|
|
only when analysing *all* versions from PyPI, rather than when analysing
|
|
|
|
|
public versions. This is largely due to the fact that PyPI normally reports
|
2013-02-21 08:51:24 -05:00
|
|
|
|
only the most recent version for each project (unless maintainers
|
|
|
|
|
explicitly configure their project to display additional versions). However,
|
2013-02-21 08:37:00 -05:00
|
|
|
|
installers that need to satisfy detailed version constraints often need
|
|
|
|
|
to look at all available versions, as they may need to retrieve an older
|
|
|
|
|
release.
|
|
|
|
|
|
|
|
|
|
Even this PEP doesn't completely eliminate the sorting differences relative
|
|
|
|
|
to setuptools:
|
|
|
|
|
|
|
|
|
|
* Sorts differently (after translations): 38 / 28194 (0.13 %)
|
|
|
|
|
* Sorts differently (no translations): 2 / 28194 (0.01 %)
|
2013-02-17 03:14:42 -05:00
|
|
|
|
|
|
|
|
|
The two remaining sort order discrepancies picked up by the analysis are due
|
2013-02-21 08:37:00 -05:00
|
|
|
|
to a pair of projects which have PyPI releases ending with a carriage
|
2013-02-17 03:14:42 -05:00
|
|
|
|
return, alongside releases with the same version number, only *without* the
|
|
|
|
|
trailing carriage return.
|
|
|
|
|
|
|
|
|
|
The sorting discrepancies after translation relate mainly to differences
|
|
|
|
|
in the handling of pre-releases where the standard mechanism is considered
|
|
|
|
|
to be an improvement. For example, the existing pkg_resources scheme will
|
|
|
|
|
sort "1.1beta1" *after* "1.1b2", whereas the suggested standard translation
|
|
|
|
|
for "1.1beta1" is "1.1b1", which sorts *before* "1.1b2". Similarly, the
|
|
|
|
|
pkg_resources scheme will sort "-dev-N" pre-releases differently from
|
2013-02-17 05:03:21 -05:00
|
|
|
|
"devN" pre-releases when they occur within the same release, while the
|
2013-02-17 03:14:42 -05:00
|
|
|
|
standard scheme will normalize both representations to ".devN" and sort
|
|
|
|
|
them by the numeric component.
|
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2013-02-09 07:40:18 -05:00
|
|
|
|
A more opinionated description of the versioning scheme
|
2013-02-09 08:23:15 -05:00
|
|
|
|
-------------------------------------------------------
|
2013-02-09 07:40:18 -05:00
|
|
|
|
|
|
|
|
|
As in PEP 386, the primary focus is on codifying existing practices to make
|
|
|
|
|
them more amenable to automation, rather than demanding that existing
|
|
|
|
|
projects make non-trivial changes to their workflow. However, the
|
|
|
|
|
standard scheme allows significantly more flexibility than is needed
|
|
|
|
|
for the vast majority of simple Python packages (which often don't even
|
|
|
|
|
need maintenance releases - many users are happy with needing to upgrade to a
|
|
|
|
|
new feature release to get bug fixes).
|
|
|
|
|
|
|
|
|
|
For the benefit of novice developers, and for experienced developers
|
|
|
|
|
wishing to better understand the various use cases, the specification
|
|
|
|
|
now goes into much greater detail on the components of the defined
|
|
|
|
|
version scheme, including examples of how each component may be used
|
|
|
|
|
in practice.
|
|
|
|
|
|
|
|
|
|
The PEP also explicitly guides developers in the direction of
|
|
|
|
|
semantic versioning (without requiring it), and discourages the use of
|
|
|
|
|
several aspects of the full versioning scheme that have largely been
|
|
|
|
|
included in order to cover esoteric corner cases in the practices of
|
|
|
|
|
existing projects and in repackaging software for Linux distributions.
|
|
|
|
|
|
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
Changing the interpretation of version specifiers
|
|
|
|
|
-------------------------------------------------
|
|
|
|
|
|
|
|
|
|
The previous interpretation of version specifiers made it very easy to
|
|
|
|
|
accidentally download a pre-release version of a dependency. This in
|
|
|
|
|
turn made it difficult for developers to publish pre-release versions
|
2013-02-09 07:40:18 -05:00
|
|
|
|
of software to the Python Package Index, as leaving the package set as
|
|
|
|
|
public would lead to users inadvertently downloading pre-release software,
|
|
|
|
|
while hiding it would defeat the purpose of publishing it for user
|
|
|
|
|
testing.
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
The previous interpretation also excluded post-releases from some version
|
|
|
|
|
specifiers for no adequately justified reason.
|
|
|
|
|
|
|
|
|
|
The updated interpretation is intended to make it difficult to accidentally
|
|
|
|
|
accept a pre-release version as satisfying a dependency, while allowing
|
|
|
|
|
pre-release versions to be explicitly requested when needed.
|
|
|
|
|
|
|
|
|
|
|
2013-02-09 08:39:08 -05:00
|
|
|
|
Packaging, build and installation dependencies
|
|
|
|
|
----------------------------------------------
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
The new ``Setup-Requires-Dist`` field allows a distribution to indicate when
|
|
|
|
|
a dependency is needed to package, build or install the distribution, rather
|
|
|
|
|
than being needed to run the software after installation.
|
|
|
|
|
|
|
|
|
|
This should allow distribution tools to effectively support a wider range of
|
|
|
|
|
distribution requirements.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Support for optional features of distributions
|
|
|
|
|
----------------------------------------------
|
|
|
|
|
|
|
|
|
|
The new ``Provides-Extra`` field allows distributions to declare optional
|
|
|
|
|
features, and to use environment markers to reduce their dependencies
|
|
|
|
|
when those features are not requested. Environment markers may also be
|
|
|
|
|
used to require a later version of Python when particular features are
|
|
|
|
|
requested.
|
|
|
|
|
|
|
|
|
|
The ``Requires-Dist`` and ``Setup-Requires-Dist`` fields then allow
|
|
|
|
|
distributions to require optional features of other distributions.
|
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
The ``test`` and ``doc`` features are implicitly defined for all
|
|
|
|
|
distributions, as one key motivation for this feature is to encourage
|
|
|
|
|
distributions to explicitly declare the dependencies needed to run
|
|
|
|
|
their automatic tests, or build their documentation, without demanding those
|
2013-02-03 06:11:16 -05:00
|
|
|
|
dependencies be present in order to merely install or use the software.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Support for metadata extensions
|
|
|
|
|
-------------------------------
|
|
|
|
|
|
|
|
|
|
The new ``Extension`` field effectively allows sections of the metadata
|
|
|
|
|
namespace to be delegated to other distributions, while preserving a
|
|
|
|
|
standard overal format metadata format for easy of processing by
|
|
|
|
|
distribution tools that do not support a particular extension.
|
|
|
|
|
|
|
|
|
|
It also works well in combination with the new ``Setup-Requires-Dist`` field
|
2013-02-04 07:55:22 -05:00
|
|
|
|
to allow a distribution to depend on tools which *do* know how to handle
|
2013-02-03 06:11:16 -05:00
|
|
|
|
the chosen extension, and the new optional features mechanism, allowing
|
|
|
|
|
support for particular extensions to be provided as optional features.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Updated obsolescence mechanism
|
|
|
|
|
------------------------------
|
|
|
|
|
|
|
|
|
|
The marker to indicate when a project is obsolete and should be replaced
|
|
|
|
|
has been moved to the obsolete project (the new ``Obsoleted-By`` field),
|
|
|
|
|
replacing the previous marker on the replacement project (the removed
|
2013-02-03 07:45:52 -05:00
|
|
|
|
``Obsoletes-Dist`` field).
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
This should allow distribution tools to more easily warn users of
|
|
|
|
|
obsolete projects and their suggested replacements.
|
|
|
|
|
|
2013-02-03 07:45:52 -05:00
|
|
|
|
The ``Obsoletes-Dist`` header is removed rather than deprecated as it
|
|
|
|
|
is not widely supported, and so removing it does not present any significant
|
|
|
|
|
barrier to tools and projects adopting the new metadata format.
|
|
|
|
|
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
|
|
|
|
Simpler description format
|
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
|
|
Distribution descriptions are often quite long, sometimes including a
|
|
|
|
|
short guide to using the module. Moving them into the file payload allows
|
|
|
|
|
them to be formatted neatly as reStructuredText without needing to
|
|
|
|
|
carefully avoid the introduction of a blank line that would terminate
|
|
|
|
|
the header section.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-03 16:31:55 -05:00
|
|
|
|
The ``Description`` header is deprecated rather than removed to support
|
2013-02-03 07:45:52 -05:00
|
|
|
|
easier conversion of existing tools and projects to the new metadata
|
|
|
|
|
format.
|
|
|
|
|
|
2012-12-31 10:45:03 -05:00
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
References
|
|
|
|
|
==========
|
|
|
|
|
|
2013-02-17 04:43:54 -05:00
|
|
|
|
This document specifies version 2.0 of the metadata format.
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Version 1.0 is specified in PEP 241.
|
|
|
|
|
Version 1.1 is specified in PEP 314.
|
|
|
|
|
Version 1.2 is specified in PEP 345.
|
|
|
|
|
|
2013-02-04 07:55:22 -05:00
|
|
|
|
The initial attempt at a standardised version scheme, along with the
|
2013-02-03 06:11:16 -05:00
|
|
|
|
justifications for needing such a standard can be found in PEP 386.
|
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
.. [1] reStructuredText markup:
|
|
|
|
|
http://docutils.sourceforge.net/
|
|
|
|
|
|
|
|
|
|
.. _`Python Package Index`: http://pypi.python.org/pypi/
|
|
|
|
|
|
2012-10-20 22:44:40 -04:00
|
|
|
|
.. [2] PEP 301:
|
|
|
|
|
http://www.python.org/dev/peps/pep-0301/
|
|
|
|
|
|
2013-02-17 04:59:27 -05:00
|
|
|
|
.. [3] Version compatibility analysis script:
|
2013-02-17 03:14:42 -05:00
|
|
|
|
http://hg.python.org/peps/file/default/pep-0426/pepsort.py
|
2013-02-03 06:11:16 -05:00
|
|
|
|
|
2013-02-21 08:37:00 -05:00
|
|
|
|
Appendix A
|
|
|
|
|
==========
|
|
|
|
|
|
|
|
|
|
The script used for this analysis is available at [3]_.
|
2012-10-20 22:44:40 -04:00
|
|
|
|
|
2013-02-17 04:43:54 -05:00
|
|
|
|
Parsing and generating the Metadata 2.0 serialization format using
|
2012-10-20 22:44:40 -04:00
|
|
|
|
Python 3.3::
|
|
|
|
|
|
2013-02-17 04:43:54 -05:00
|
|
|
|
# Metadata 2.0 demo
|
2012-10-20 22:44:40 -04:00
|
|
|
|
from email.generator import Generator
|
2012-12-31 10:45:03 -05:00
|
|
|
|
from email import header
|
|
|
|
|
from email.parser import Parser
|
|
|
|
|
from email.policy import Compat32
|
2012-10-20 22:44:40 -04:00
|
|
|
|
from email.utils import _has_surrogates
|
|
|
|
|
|
|
|
|
|
class MetadataPolicy(Compat32):
|
|
|
|
|
max_line_length = 0
|
|
|
|
|
continuation_whitespace = '\t'
|
2012-12-31 10:45:03 -05:00
|
|
|
|
|
2012-10-20 22:44:40 -04:00
|
|
|
|
def _sanitize_header(self, name, value):
|
|
|
|
|
if not isinstance(value, str):
|
|
|
|
|
return value
|
|
|
|
|
if _has_surrogates(value):
|
|
|
|
|
raise NotImplementedError()
|
|
|
|
|
else:
|
|
|
|
|
return value
|
|
|
|
|
|
|
|
|
|
def _fold(self, name, value, sanitize):
|
|
|
|
|
body = ((self.linesep+self.continuation_whitespace)
|
|
|
|
|
.join(value.splitlines()))
|
|
|
|
|
return ''.join((name, ': ', body, self.linesep))
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
import sys
|
|
|
|
|
import textwrap
|
|
|
|
|
|
|
|
|
|
pkg_info = """\
|
2013-02-17 04:43:54 -05:00
|
|
|
|
Metadata-Version: 2.0
|
2012-10-20 22:44:40 -04:00
|
|
|
|
Name: package
|
|
|
|
|
Version: 0.1.0
|
|
|
|
|
Summary: A package.
|
|
|
|
|
Description: Description
|
|
|
|
|
===========
|
2012-12-31 10:45:03 -05:00
|
|
|
|
|
2012-10-20 22:44:40 -04:00
|
|
|
|
A description of the package.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
m = Parser(policy=MetadataPolicy()).parsestr(pkg_info)
|
|
|
|
|
|
|
|
|
|
m['License'] = 'GPL'
|
|
|
|
|
description = m['Description']
|
|
|
|
|
description_lines = description.splitlines()
|
2012-12-31 10:45:03 -05:00
|
|
|
|
m.set_payload(description_lines[0]
|
|
|
|
|
+ '\n'
|
|
|
|
|
+ textwrap.dedent('\n'.join(description_lines[1:]))
|
2012-10-20 22:44:40 -04:00
|
|
|
|
+ '\n')
|
|
|
|
|
del m['Description']
|
|
|
|
|
|
|
|
|
|
# Correct if sys.stdout.encoding == 'UTF-8':
|
|
|
|
|
Generator(sys.stdout, maxheaderlen=0).flatten(m)
|
2012-08-31 09:53:29 -04:00
|
|
|
|
|
2013-02-21 08:37:00 -05:00
|
|
|
|
Appendix B
|
|
|
|
|
==========
|
|
|
|
|
|
|
|
|
|
Metadata v2.0 guidelines versus setuptools::
|
|
|
|
|
|
|
|
|
|
$ ./pepsort.py
|
|
|
|
|
Comparing PEP 426 version sort to setuptools.
|
|
|
|
|
|
|
|
|
|
Analysing release versions
|
|
|
|
|
Compatible: 24477 / 28194 (86.82 %)
|
|
|
|
|
Compatible with translation: 247 / 28194 (0.88 %)
|
|
|
|
|
Compatible with filtering: 84 / 28194 (0.30 %)
|
|
|
|
|
No compatible versions: 420 / 28194 (1.49 %)
|
|
|
|
|
Sorts differently (after translations): 0 / 28194 (0.00 %)
|
|
|
|
|
Sorts differently (no translations): 0 / 28194 (0.00 %)
|
|
|
|
|
No applicable versions: 2966 / 28194 (10.52 %)
|
|
|
|
|
|
|
|
|
|
Analysing public versions
|
|
|
|
|
Compatible: 25600 / 28194 (90.80 %)
|
|
|
|
|
Compatible with translation: 1505 / 28194 (5.34 %)
|
|
|
|
|
Compatible with filtering: 13 / 28194 (0.05 %)
|
|
|
|
|
No compatible versions: 420 / 28194 (1.49 %)
|
|
|
|
|
Sorts differently (after translations): 0 / 28194 (0.00 %)
|
|
|
|
|
Sorts differently (no translations): 0 / 28194 (0.00 %)
|
|
|
|
|
No applicable versions: 656 / 28194 (2.33 %)
|
|
|
|
|
|
|
|
|
|
Analysing all versions
|
|
|
|
|
Compatible: 24239 / 28194 (85.97 %)
|
|
|
|
|
Compatible with translation: 2833 / 28194 (10.05 %)
|
|
|
|
|
Compatible with filtering: 513 / 28194 (1.82 %)
|
|
|
|
|
No compatible versions: 320 / 28194 (1.13 %)
|
|
|
|
|
Sorts differently (after translations): 38 / 28194 (0.13 %)
|
|
|
|
|
Sorts differently (no translations): 2 / 28194 (0.01 %)
|
|
|
|
|
No applicable versions: 249 / 28194 (0.88 %)
|
|
|
|
|
|
|
|
|
|
Metadata v1.2 guidelines versus setuptools::
|
|
|
|
|
|
|
|
|
|
$ ./pepsort.py 386
|
|
|
|
|
Comparing PEP 386 version sort to setuptools.
|
|
|
|
|
|
|
|
|
|
Analysing release versions
|
|
|
|
|
Compatible: 24244 / 28194 (85.99 %)
|
|
|
|
|
Compatible with translation: 247 / 28194 (0.88 %)
|
|
|
|
|
Compatible with filtering: 84 / 28194 (0.30 %)
|
|
|
|
|
No compatible versions: 648 / 28194 (2.30 %)
|
|
|
|
|
Sorts differently (after translations): 0 / 28194 (0.00 %)
|
|
|
|
|
Sorts differently (no translations): 0 / 28194 (0.00 %)
|
|
|
|
|
No applicable versions: 2971 / 28194 (10.54 %)
|
|
|
|
|
|
|
|
|
|
Analysing public versions
|
|
|
|
|
Compatible: 25371 / 28194 (89.99 %)
|
|
|
|
|
Compatible with translation: 1507 / 28194 (5.35 %)
|
|
|
|
|
Compatible with filtering: 12 / 28194 (0.04 %)
|
|
|
|
|
No compatible versions: 648 / 28194 (2.30 %)
|
|
|
|
|
Sorts differently (after translations): 0 / 28194 (0.00 %)
|
|
|
|
|
Sorts differently (no translations): 0 / 28194 (0.00 %)
|
|
|
|
|
No applicable versions: 656 / 28194 (2.33 %)
|
|
|
|
|
|
|
|
|
|
Analysing all versions
|
|
|
|
|
Compatible: 23969 / 28194 (85.01 %)
|
|
|
|
|
Compatible with translation: 2789 / 28194 (9.89 %)
|
|
|
|
|
Compatible with filtering: 530 / 28194 (1.88 %)
|
|
|
|
|
No compatible versions: 547 / 28194 (1.94 %)
|
|
|
|
|
Sorts differently (after translations): 96 / 28194 (0.34 %)
|
|
|
|
|
Sorts differently (no translations): 14 / 28194 (0.05 %)
|
|
|
|
|
No applicable versions: 249 / 28194 (0.88 %)
|
|
|
|
|
|
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
Copyright
|
|
|
|
|
=========
|
|
|
|
|
|
|
|
|
|
This document has been placed in the public domain.
|
|
|
|
|
|
2012-12-31 10:45:03 -05:00
|
|
|
|
|
2012-08-31 09:53:29 -04:00
|
|
|
|
..
|
|
|
|
|
Local Variables:
|
|
|
|
|
mode: indented-text
|
|
|
|
|
indent-tabs-mode: nil
|
|
|
|
|
sentence-end-double-space: t
|
|
|
|
|
fill-column: 70
|
|
|
|
|
End:
|