[Python-checkins] r77137 - peps/trunk/pep-0345.txt

tarek.ziade python-checkins at python.org
Wed Dec 30 10:02:01 CET 2009


Author: tarek.ziade
Date: Wed Dec 30 10:02:01 2009
New Revision: 77137

Log:
changed the range mechanism, after recent discussions in various MLs

Modified:
   peps/trunk/pep-0345.txt

Modified: peps/trunk/pep-0345.txt
==============================================================================
--- peps/trunk/pep-0345.txt	(original)
+++ peps/trunk/pep-0345.txt	Wed Dec 30 10:02:01 2009
@@ -296,7 +296,7 @@
 Provides-Dist (multiple use)
 ::::::::::::::::::::::::::::
 
-Each entry contains a string naming a distutlis project which
+Each entry contains a string naming a Distutils project which
 is contained within this distribution.  This field *must* include
 the project identified in the ``Name`` field.
 
@@ -416,29 +416,48 @@
 
 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``.
-
+When a version is provided, it always includes all versions that
+starts with the same value. For example the "2.5" version of Python
+will include versions like "2.5.2" or "2.5.3". Pre and post releases
+in that case are excluded. So in our example, versions like "2.5a1" are
+not included when "2.5" is used. If the first version of the range is
+required, it has to be explicitly given. In our example, it will be
+"2.5.0".
+
+Notice that some projects might omit the ".0" prefix for the first release
+of the "2.5.x" series:
+
+- 2.5
+- 2.5.1
+- 2.5.2
+- etc.
+
+In that case, "2.5.0" will have to be explicitly used to avoid any confusion
+between the "2.5" notation that represents the full range. It is a recommended
+practice to use schemes of the same length for a series to completely avoid
+this problem.
+
+Some Examples:
+
+- ``Requires-Dist: zope.interface (3.1)``: any version that starts with 3.1,
+  excluding post or pre-releases.
+- ``Requires-Dist: zope.interface (3.1.0)``: any version that starts with
+  3.1.0, excluding post or pre-releases. Since that particular project doesn't
+  use more than 3 digits, it also means "only the 3.1.0 release".
+- ``Requires-Python: 3``: Any Python 3 version, no matter wich one, excluding
+  post or pre-releases.
+- ``Requires-Python: >=2.6,<3``: Any version of Python 2.6 or 2.7, including
+  post releases of 2.6, pre and post releases of 2.7. It excludes pre releases
+  of Python 3.
+- ``Requires-Python: 2.6.2``: Equivalent to ">=2.6.2,<2.6.3". So this includes
+  only Python 2.6.2. Of course, if Python was numbered with 4 digits, it would
+  have include all versions of the 2.6.2 series.
+- ``Requires-Python: 2.5.0``: Equivalent to ">=2.5.0,<2.5.1".
+- ``Requires-Dist: zope.interface (3.1,!=3.1.3)``: any version that starts with
+  3.1, excluding post or pre-releases of 3.1 *and* excluding any version that
+  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".
 
 Environment markers
 ===================
@@ -449,9 +468,9 @@
 
 Here are some example of fields using such markers::
 
-   Requires-Dist: pywin32 > 1.0; sys.platform == 'win32'
+   Requires-Dist: pywin32 (>1.0); sys.platform == 'win32'
    Obsoletes-Dist: pywin31; sys.platform == 'win32'
-   Requires-Dist: foo; os.machine == 'i386'
+   Requires-Dist: foo (1,!=1.3); os.machine == 'i386'
    Requires-Dist: bar; python_version == '2.4' or python_version == '2.5'
    Requires-External: libxslt; 'linux' in sys.platform
 


More information about the Python-checkins mailing list