diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2019-12-02 13:09:17 +0300 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2019-12-02 13:09:17 +0300 |
commit | 38fde63f74091af1f6a0d485474769bb6b4f17ce (patch) | |
tree | 1317a1fa2ef61c710ff5c653f43c0af8bb164ca6 /debian/patches/ensurepip-wheels | |
download | pypy-debian.tar.gz |
Import pypy (7.2.0+dfsg-1)debian/7.2.0+dfsg-1debian
Diffstat (limited to 'debian/patches/ensurepip-wheels')
-rw-r--r-- | debian/patches/ensurepip-wheels | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/debian/patches/ensurepip-wheels b/debian/patches/ensurepip-wheels new file mode 100644 index 0000000..4533f33 --- /dev/null +++ b/debian/patches/ensurepip-wheels @@ -0,0 +1,145 @@ +From: Stefano Rivera <stefanor@debian.org> +Date: Sat, 7 Oct 2017 09:38:58 +0200 +Subject: Let ensurepip use the system wheels + +Not the ones from the python source. + +Origin: Debian cpython packaging +Last-Update: 2015-03-26 +--- + lib-python/2.7/ensurepip/__init__.py | 74 ++++++++++++++++++++++++++---------- + 1 file changed, 54 insertions(+), 20 deletions(-) + +diff --git a/lib-python/2.7/ensurepip/__init__.py b/lib-python/2.7/ensurepip/__init__.py +index c2abed8..f1cdbd1 100644 +--- a/lib-python/2.7/ensurepip/__init__.py ++++ b/lib-python/2.7/ensurepip/__init__.py +@@ -1,6 +1,7 @@ + #!/usr/bin/env python2 + from __future__ import print_function + ++import glob + import os + import os.path + import pkgutil +@@ -12,13 +13,9 @@ import tempfile + __all__ = ["version", "bootstrap"] + + +-_SETUPTOOLS_VERSION = "28.8.0" +- +-_PIP_VERSION = "9.0.1" +- + _PROJECTS = [ +- ("setuptools", _SETUPTOOLS_VERSION), +- ("pip", _PIP_VERSION), ++ "setuptools", ++ "pip", + ] + + +@@ -36,7 +33,11 @@ def version(): + """ + Returns a string specifying the bundled version of pip. + """ +- return _PIP_VERSION ++ whl_name = 'pip' ++ wheel_names = glob.glob('/usr/share/python-wheels/%s-*.whl' % whl_name) ++ if len(wheel_names) == 1: ++ return os.path.basename(wheel_names[0]).split('-')[1] ++ raise RuntimeError('missing dependency wheel %s. Installation of the python-%s-whl package is needed to use ensurepip.' % (whl_name, whl_name)) + + + def _disable_pip_configuration_settings(): +@@ -78,21 +79,53 @@ def bootstrap(root=None, upgrade=False, user=False, + # omit pip and easy_install + os.environ["ENSUREPIP_OPTIONS"] = "install" + ++ # Debian: The bundled wheels are useless to us because we must use ones ++ # crafted from source code in the archive. As we build the virtual ++ # environment, copy the wheels from the system location into the virtual ++ # environment, and place those wheels on sys.path. ++ def copy_wheels(wheels, destdir, paths): ++ for project in wheels: ++ wheel_names = glob.glob( ++ '/usr/share/python-wheels/{}-*.whl'.format(project)) ++ if len(wheel_names) == 0: ++ raise RuntimeError('missing dependency wheel %s. Installation of the python-%s-whl package is needed to use ensurepip.' % (project, project)) ++ assert len(wheel_names) == 1, wheel_names ++ wheel_name = os.path.basename(wheel_names[0]) ++ path = os.path.join('/usr/share/python-wheels', wheel_name) ++ with open(path, 'rb') as fp: ++ whl = fp.read() ++ dest = os.path.join(destdir, wheel_name) ++ with open(dest, 'wb') as fp: ++ fp.write(whl) ++ paths.append(dest) ++ ++ # check that the python-{pip,setuptools}-whl packages are installed ++ missing = [] ++ for project in reversed(_PROJECTS): ++ wheel_names = glob.glob('/usr/share/python-wheels/%s-*.whl' % project) ++ if len(wheel_names) != 1: ++ missing.append(project) ++ if missing: ++ raise RuntimeError('missing wheel(s) %s. Installation of the %s package(s) is needed to use ensurepip.' \ ++ % (', '.join([missing]), ++ ', '.join(['python-%s-whl' % m for m in missing])) \ ++ ) ++ + tmpdir = tempfile.mkdtemp() ++ ++ for project in _PROJECTS: ++ try: ++ with open('/usr/share/python-wheels/%s.dependencies' % project) as fp: ++ dependencies = [line[:-1].split()[0] for line in fp.readlines()] ++ except IOError: ++ dependencies = [] ++ copy_wheels(dependencies, tmpdir, sys.path) ++ + try: + # Put our bundled wheels into a temporary directory and construct the + # additional paths that need added to sys.path + additional_paths = [] +- for project, version in _PROJECTS: +- wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version) +- whl = pkgutil.get_data( +- "ensurepip", +- "_bundled/{}".format(wheel_name), +- ) +- with open(os.path.join(tmpdir, wheel_name), "wb") as fp: +- fp.write(whl) +- +- additional_paths.append(os.path.join(tmpdir, wheel_name)) ++ copy_wheels(_PROJECTS, tmpdir, additional_paths) + + # Construct the arguments to be passed to the pip command + args = ["install", "--no-index", "--find-links", tmpdir] +@@ -105,7 +138,7 @@ def bootstrap(root=None, upgrade=False, user=False, + if verbosity: + args += ["-" + "v" * verbosity] + +- _run_pip(args + [p[0] for p in _PROJECTS], additional_paths) ++ _run_pip(args + _PROJECTS, additional_paths) + finally: + shutil.rmtree(tmpdir, ignore_errors=True) + +@@ -122,7 +155,8 @@ def _uninstall_helper(verbosity=0): + return + + # If the pip version doesn't match the bundled one, leave it alone +- if pip.__version__ != _PIP_VERSION: ++ # Disabled for Debian, always using the version from the python3-pip package. ++ if False and pip.__version__ != _PIP_VERSION: + msg = ("ensurepip will only uninstall a matching version " + "({!r} installed, {!r} bundled)") + print(msg.format(pip.__version__, _PIP_VERSION), file=sys.stderr) +@@ -135,7 +169,7 @@ def _uninstall_helper(verbosity=0): + if verbosity: + args += ["-" + "v" * verbosity] + +- _run_pip(args + [p[0] for p in reversed(_PROJECTS)]) ++ _run_pip(args + reversed(_PROJECTS)) + + + def _main(argv=None): |