added the range operator, and more details on versions

This commit is contained in:
Tarek Ziadé 2009-12-27 23:50:39 +00:00
parent 3e07e8623b
commit 7fe3d72593
1 changed files with 44 additions and 45 deletions

View File

@ -283,15 +283,8 @@ optionally followed by a version declaration within parentheses.
The distutils project names should correspond to names as found
on the `Python Package Index`_.
A version declaration is a series of conditional operators and
version numbers, separated by commas. Conditional operators
must be one of "<", ">", "<=", ">=", "==", and "!=". Version
numbers must be in the format specified in `PEP 386`_.
If no operator is provided with a version, the "==" operator
is used by default.
Any number of conditional operators can be specified, e.g.
the string ">1.0, !=1.3.4, <2.0" is a legal version declaration.
Version declarations must follow the rules described in
`Version Specifiers`_
Examples::
@ -322,10 +315,9 @@ RDBMS bindings for use by a given ORM: each project might declare
that it provides ``ORM-bindings``, allowing other projects to depend
only on having at most one of them installed.
A version declaration may be supplied (without a comparison
operator); the distribution's version number will be implied if none
is specified. Version numbers must be in the format specified in
`PEP 386`_.
A version declaration may be supplied and must follow the rules described
in `Version Specifiers`_. The distribution's version number will be implied
if none is specified.
Examples::
@ -342,7 +334,7 @@ this package renders obsolete, meaning that the two packages
should not be installed at the same time.
Version declarations can be supplied. Version numbers must be in the
format specified in `PEP 386`_.
format specified in `Version Specifiers`_.
The most common use of this field will be in case a project name
changes, e.g. Gorgon 2.3 gets subsumed into Torqued Python 1.0.
@ -359,19 +351,13 @@ Requires-Python
:::::::::::::::
This field specifies the Python version(s) that the package is
guaranteed to be compatible with. The format of the field is a
series of conditional operators and version numbers, separated
by commas. Conditional operators must be one of "<", ">", "<=",
">=", "==", and "!=". If no operator is provided with a version,
the "==" operator is used by default.
guaranteed to be compatible with.
Version numbers must be in the format specified in `PEP 386`_.
Any number of conditional operators can be specified, e.g.
the string ">1.0, !=1.3.4, <2.0" is a legal version declaration.
Version numbers must be in the format specified in `Version Specifiers`_.
Examples::
Requires-Python: 2.5
Requires-Python: >2.1
Requires-Python: >=2.3.4
Requires-Python: 2.5, 2.6
@ -389,19 +375,13 @@ The format of a requirement string is a name of an external
dependency, optionally followed by a version declaration within
parentheses.
A version declaration is a series of conditional operators and
version numbers, separated by commas. Conditional operators
must be one of "<", ">", "<=", ">=", "==", and "!=". If no
operator is provided with a version, the "==" operator is used by default.
Version numbers must be in the format specified in `Version Specifiers`_.
Because they refer to non-Python software releases, version numbers
for this field are **not** required to conform to the format
specified in `PEP 386`_: they should correspond to the
version scheme used by the external dependency.
Any number of conditional operators can be specified, e.g.
the string ">1.0, !=1.3.4, <2.0" is a legal version declaration.
Notice that there's is no particular rule on the strings to be used.
Examples::
@ -426,8 +406,38 @@ The label is a free text limited to 32 signs.
Version Specifiers
==================
The specification for distribution version specifiers has been moved to
`PEP 386`_.
Version specifiers are a series of conditional operators and
version numbers, separated by commas. Conditional operators
must be one of "<", ">", "<=", ">=", "==", "~=" and "!=".
Any number of conditional operators can be specified, e.g.
the string ``>1.0, !=1.3.4, <2.0`` is a legal version declaration.
The comma (``,``) is equivalent to the **or** operator.
Each version number must be in the format specified in `PEP 386`_.
The range operator ("~=") is a special operator that can be used to
define a range of versions by describing a MAJOR or a MAJOR.MINOR
version. All versions that starts with the definition will
be included in the range.
Examples:
- ``Requires-Python: ~=2.5`` means all versions of Python 2.5.
- ``Requires-Python: ~=2`` means all versions of Python 2.
- ``~=2.5.2`` is equivalent to ``==2.5.2``
The range operator is limited to the MAJOR and MINOR parts of
a version string, as specified in `PEP 386`_. Post and pre-releases
are not included in range operators.
The ``Requires-External`` field can use the operators described in this
section but since the version scheme might not be compatible with `PEP 386`_,
the range operator might not be appliable.
For each field that uses a version, if no operator is provided, the
range operator is used by default. For example, ``Requires-Python: 2.5``
is equivalent to ``Requires-Python: ~=2.5``.
Environment markers
@ -445,17 +455,6 @@ Here are some example of fields using such markers::
Requires-Dist: bar; python_version == '2.4' or python_version == '2.5'
Requires-External: libxslt; 'linux' in sys.platform
These markers are using a micro-language that can be interpreted using a
function ``interpret_marker`` provided in the ``distutils.util`` module
in the stdlib::
>>> from distutils.util import interpret_marker
>>> interpret_marker("sys.platform == 'win32'")
True
Depending if the execution environment meets the requirements, the function
will return True or False.
The micro-language behind this is the simplest possible: it compares only
strings, with the ``==`` and ``in`` operators (and their opposites), and
with the ability to combine expressions. It makes it also easy to understand
@ -545,8 +544,8 @@ Acknowledgements
Fred Drake, Anthony Baxter and Matthias Klose have all contributed to
the ideas presented in this PEP.
Tres Seaver, Jim Fulton, Marc-André Lemburg, Tarek Ziadé and other people at
the Distutils-SIG have contributed to the new updated version.
Tres Seaver, Jim Fulton, Marc-André Lemburg, Martin von Löwis, Tarek Ziadé and
other people at the Distutils-SIG have contributed to the new updated version.
..