summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2018-09-05 07:46:26 -0700
committerVictor Stinner <vstinner@redhat.com>2018-09-05 16:46:26 +0200
commit9734024ec65311e33936faa83fb1cb249ef0de9d (patch)
treeeebb9a1979d2223b8c630965ef2bf374fcbfe513
parent7056ca880bf4ff428dfb2c4eee67919dc43ecd34 (diff)
downloadcpython-git-9734024ec65311e33936faa83fb1cb249ef0de9d.tar.gz
bpo-26544: Get rid of dependence from distutils in platform. (GH-8356) (GH-8952)
(cherry picked from commit 7d81e8f5995df6980a1a02923e224a481375f130) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
-rwxr-xr-xLib/platform.py31
1 files changed, 30 insertions, 1 deletions
diff --git a/Lib/platform.py b/Lib/platform.py
index 44a612b28f..62a5476a8f 100755
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -132,6 +132,35 @@ except AttributeError:
# 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(r'(__libc_init)'
@@ -155,7 +184,7 @@ def libc_ver(executable=sys.executable,lib='',version='', chunksize=2048):
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