[Python-checkins] bpo-26544: Get rid of dependence from distutils in platform. (GH-8356)

Serhiy Storchaka webhook-mailer at python.org
Mon Aug 27 06:29:56 EDT 2018


https://github.com/python/cpython/commit/7d81e8f5995df6980a1a02923e224a481375f130
commit: 7d81e8f5995df6980a1a02923e224a481375f130
branch: master
author: Serhiy Storchaka <storchaka at gmail.com>
committer: GitHub <noreply at github.com>
date: 2018-08-27T13:29:51+03:00
summary:

bpo-26544: Get rid of dependence from distutils in platform. (GH-8356)

files:
M Lib/platform.py

diff --git a/Lib/platform.py b/Lib/platform.py
index a7785a22440e..f7e24d739c6d 100755
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -132,6 +132,35 @@
         # Standard Unix uses /dev/null
         DEV_NULL = '/dev/null'
 
+# Helper for comparing two version number strings.
+# Based on the description of the PHP's version_compare():
+# http://php.net/manual/en/function.version-compare.php
+
+_ver_stages = {
+    # any string not found in this dict, will get 0 assigned
+    'dev': 10,
+    'alpha': 20, 'a': 20,
+    'beta': 30, 'b': 30,
+    'c': 40,
+    'RC': 50, 'rc': 50,
+    # number, will get 100 assigned
+    'pl': 200, 'p': 200,
+}
+
+_component_re = re.compile(r'([0-9]+|[._+-])')
+
+def _comparable_version(version):
+    result = []
+    for v in _component_re.split(version):
+        if v not in '._+-':
+            try:
+                v = int(v, 10)
+                t = 100
+            except ValueError:
+                t = _ver_stages.get(v, 0)
+            result.extend((t, v))
+    return result
+
 ### Platform specific APIs
 
 _libc_search = re.compile(b'(__libc_init)'
@@ -155,7 +184,7 @@ def libc_ver(executable=sys.executable, lib='', version='', chunksize=16384):
         The file is read and scanned in chunks of chunksize bytes.
 
     """
-    from distutils.version import LooseVersion as V
+    V = _comparable_version
     if hasattr(os.path, 'realpath'):
         # Python 2.2 introduced os.path.realpath(); it is used
         # here to work around problems with Cygwin not being



More information about the Python-checkins mailing list