summaryrefslogtreecommitdiff
path: root/debian/patches/ensurepip-wheels
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2019-12-02 13:09:17 +0300
committerIgor Pashev <pashev.igor@gmail.com>2019-12-02 13:09:17 +0300
commit38fde63f74091af1f6a0d485474769bb6b4f17ce (patch)
tree1317a1fa2ef61c710ff5c653f43c0af8bb164ca6 /debian/patches/ensurepip-wheels
downloadpypy-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-wheels145
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):