174 lines
6.8 KiB
Diff
174 lines
6.8 KiB
Diff
|
From 5754521af1d51aa8e445cba07a093bbc0c88596d Mon Sep 17 00:00:00 2001
|
||
|
From: Zackery Spytz <zspytz@gmail.com>
|
||
|
Date: Mon, 16 Dec 2019 18:24:08 -0700
|
||
|
Subject: [PATCH] bpo-31046: ensurepip does not honour the value of $(prefix)
|
||
|
|
||
|
Co-Authored-By: Xavier de Gaye <xdegaye@gmail.com>
|
||
|
---
|
||
|
Doc/library/ensurepip.rst | 9 +++--
|
||
|
Lib/ensurepip/__init__.py | 18 +++++++---
|
||
|
Lib/test/test_ensurepip.py | 11 ++++++
|
||
|
Makefile.pre.in | 4 +-
|
||
|
Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst | 1
|
||
|
5 files changed, 34 insertions(+), 9 deletions(-)
|
||
|
create mode 100644 Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
|
||
|
|
||
|
Index: Python-3.11.8/Doc/library/ensurepip.rst
|
||
|
===================================================================
|
||
|
--- Python-3.11.8.orig/Doc/library/ensurepip.rst
|
||
|
+++ Python-3.11.8/Doc/library/ensurepip.rst
|
||
|
@@ -59,7 +59,9 @@ is at least as recent as the one availab
|
||
|
By default, ``pip`` is installed into the current virtual environment
|
||
|
(if one is active) or into the system site packages (if there is no
|
||
|
active virtual environment). The installation location can be controlled
|
||
|
-through two additional command line options:
|
||
|
+through some additional command line options:
|
||
|
+
|
||
|
+* ``--prefix <dir>``: Installs ``pip`` using the given directory prefix.
|
||
|
|
||
|
* :samp:`--root {dir}`: Installs ``pip`` relative to the given root directory
|
||
|
rather than the root of the currently active virtual environment (if any)
|
||
|
@@ -92,7 +94,7 @@ Module API
|
||
|
Returns a string specifying the available version of pip that will be
|
||
|
installed when bootstrapping an environment.
|
||
|
|
||
|
-.. function:: bootstrap(root=None, upgrade=False, user=False, \
|
||
|
+.. function:: bootstrap(root=None, prefix=None, upgrade=False, user=False, \
|
||
|
altinstall=False, default_pip=False, \
|
||
|
verbosity=0)
|
||
|
|
||
|
@@ -102,6 +104,8 @@ Module API
|
||
|
If *root* is ``None``, then installation uses the default install location
|
||
|
for the current environment.
|
||
|
|
||
|
+ *prefix* specifies the directory prefix to use when installing.
|
||
|
+
|
||
|
*upgrade* indicates whether or not to upgrade an existing installation
|
||
|
of an earlier version of ``pip`` to the available version.
|
||
|
|
||
|
@@ -122,6 +126,8 @@ Module API
|
||
|
*verbosity* controls the level of output to :data:`sys.stdout` from the
|
||
|
bootstrapping operation.
|
||
|
|
||
|
+ .. versionchanged:: 3.9 the *prefix* parameter was added.
|
||
|
+
|
||
|
.. audit-event:: ensurepip.bootstrap root ensurepip.bootstrap
|
||
|
|
||
|
.. note::
|
||
|
Index: Python-3.11.8/Lib/ensurepip/__init__.py
|
||
|
===================================================================
|
||
|
--- Python-3.11.8.orig/Lib/ensurepip/__init__.py
|
||
|
+++ Python-3.11.8/Lib/ensurepip/__init__.py
|
||
|
@@ -122,27 +122,27 @@ def _disable_pip_configuration_settings(
|
||
|
os.environ['PIP_CONFIG_FILE'] = os.devnull
|
||
|
|
||
|
|
||
|
-def bootstrap(*, root=None, upgrade=False, user=False,
|
||
|
+def bootstrap(*, root=None, prefix=None, upgrade=False, user=False,
|
||
|
altinstall=False, default_pip=False,
|
||
|
verbosity=0):
|
||
|
"""
|
||
|
Bootstrap pip into the current Python installation (or the given root
|
||
|
- directory).
|
||
|
+ and directory prefix).
|
||
|
|
||
|
Note that calling this function will alter both sys.path and os.environ.
|
||
|
"""
|
||
|
# Discard the return value
|
||
|
- _bootstrap(root=root, upgrade=upgrade, user=user,
|
||
|
+ _bootstrap(root=root, prefix=prefix, upgrade=upgrade, user=user,
|
||
|
altinstall=altinstall, default_pip=default_pip,
|
||
|
verbosity=verbosity)
|
||
|
|
||
|
|
||
|
-def _bootstrap(*, root=None, upgrade=False, user=False,
|
||
|
+def _bootstrap(*, root=None, prefix=None, upgrade=False, user=False,
|
||
|
altinstall=False, default_pip=False,
|
||
|
verbosity=0):
|
||
|
"""
|
||
|
Bootstrap pip into the current Python installation (or the given root
|
||
|
- directory). Returns pip command status code.
|
||
|
+ and directory prefix). Returns pip command status code.
|
||
|
|
||
|
Note that calling this function will alter both sys.path and os.environ.
|
||
|
"""
|
||
|
@@ -192,6 +192,8 @@ def _bootstrap(*, root=None, upgrade=Fal
|
||
|
args = ["install", "--no-cache-dir", "--no-index", "--find-links", tmpdir]
|
||
|
if root:
|
||
|
args += ["--root", root]
|
||
|
+ if prefix:
|
||
|
+ args += ["--prefix", prefix]
|
||
|
if upgrade:
|
||
|
args += ["--upgrade"]
|
||
|
if user:
|
||
|
@@ -267,6 +269,11 @@ def _main(argv=None):
|
||
|
help="Install everything relative to this alternate root directory.",
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
+ "--prefix",
|
||
|
+ default=None,
|
||
|
+ help="Install everything using this prefix.",
|
||
|
+ )
|
||
|
+ parser.add_argument(
|
||
|
"--altinstall",
|
||
|
action="store_true",
|
||
|
default=False,
|
||
|
@@ -285,6 +292,7 @@ def _main(argv=None):
|
||
|
|
||
|
return _bootstrap(
|
||
|
root=args.root,
|
||
|
+ prefix=args.prefix,
|
||
|
upgrade=args.upgrade,
|
||
|
user=args.user,
|
||
|
verbosity=args.verbosity,
|
||
|
Index: Python-3.11.8/Lib/test/test_ensurepip.py
|
||
|
===================================================================
|
||
|
--- Python-3.11.8.orig/Lib/test/test_ensurepip.py
|
||
|
+++ Python-3.11.8/Lib/test/test_ensurepip.py
|
||
|
@@ -112,6 +112,17 @@ class TestBootstrap(EnsurepipMixin, unit
|
||
|
unittest.mock.ANY,
|
||
|
)
|
||
|
|
||
|
+ def test_bootstrapping_with_prefix(self):
|
||
|
+ ensurepip.bootstrap(prefix="/foo/bar/")
|
||
|
+ self.run_pip.assert_called_once_with(
|
||
|
+ [
|
||
|
+ "install", "--no-cache-dir", "--no-index", "--find-links",
|
||
|
+ unittest.mock.ANY, "--prefix", "/foo/bar/",
|
||
|
+ "setuptools", "pip",
|
||
|
+ ],
|
||
|
+ unittest.mock.ANY,
|
||
|
+ )
|
||
|
+
|
||
|
def test_bootstrapping_with_user(self):
|
||
|
ensurepip.bootstrap(user=True)
|
||
|
|
||
|
Index: Python-3.11.8/Makefile.pre.in
|
||
|
===================================================================
|
||
|
--- Python-3.11.8.orig/Makefile.pre.in
|
||
|
+++ Python-3.11.8/Makefile.pre.in
|
||
|
@@ -1761,7 +1761,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoni
|
||
|
install|*) ensurepip="" ;; \
|
||
|
esac; \
|
||
|
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
|
||
|
- $$ensurepip --root=$(DESTDIR)/ ; \
|
||
|
+ $$ensurepip --root=$(DESTDIR)/ --prefix=$(prefix) ; \
|
||
|
fi
|
||
|
|
||
|
altinstall: commoninstall
|
||
|
@@ -1771,7 +1771,7 @@ altinstall: commoninstall
|
||
|
install|*) ensurepip="--altinstall" ;; \
|
||
|
esac; \
|
||
|
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
|
||
|
- $$ensurepip --root=$(DESTDIR)/ ; \
|
||
|
+ $$ensurepip --root=$(DESTDIR)/ --prefix=$(prefix) ; \
|
||
|
fi
|
||
|
|
||
|
commoninstall: check-clean-src @FRAMEWORKALTINSTALLFIRST@ \
|
||
|
Index: Python-3.11.8/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
|
||
|
===================================================================
|
||
|
--- /dev/null
|
||
|
+++ Python-3.11.8/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
|
||
|
@@ -0,0 +1 @@
|
||
|
+A directory prefix can now be specified when using :mod:`ensurepip`.
|