- Tests - gh-127906: Test the limited C API in test_cppext. Patch by Victor Stinner. - gh-127906: Backport test_cext from the main branch. Patch by Victor Stinner. - gh-127637: Add tests for the dis command-line interface. Patch by Bénédikt Tran. - Security - gh-105704: When using urllib.parse.urlsplit() and urllib.parse.urlparse() host parsing would not reject domain names containing square brackets ([ and ]). Square brackets are only valid for IPv6 and IPvFuture hosts according to RFC 3986 Section 3.2.2. (CVE-2025-0938, bsc#1236705) - gh-127655: Fixed the asyncio.selector_events._SelectorSocketTransport transport not pausing writes for the protocol when the buffer reaches the high water mark when using asyncio.WriteTransport.writelines() (CVE-2024-12254, bsc#1234290). - gh-126108: Fix a possible NULL pointer dereference in PySys_AddWarnOptionUnicode(). - gh-80222: Fix bug in the folding of quoted strings when flattening an email message using a modern email policy. Previously when a quoted string was folded so that it spanned more than one line, the surrounding quotes and internal escapes would be omitted. This could theoretically be used to spoof header lines using a carefully constructed quoted string if the resulting OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python312?expand=0&rev=94
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.12.4/Doc/library/ensurepip.rst
|
|
===================================================================
|
|
--- Python-3.12.4.orig/Doc/library/ensurepip.rst
|
|
+++ Python-3.12.4/Doc/library/ensurepip.rst
|
|
@@ -59,8 +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)
|
|
or the default root for the current Python installation.
|
|
@@ -92,7 +93,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 +103,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 +125,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.12.4/Lib/ensurepip/__init__.py
|
|
===================================================================
|
|
--- Python-3.12.4.orig/Lib/ensurepip/__init__.py
|
|
+++ Python-3.12.4/Lib/ensurepip/__init__.py
|
|
@@ -120,27 +120,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.
|
|
"""
|
|
@@ -190,6 +190,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:
|
|
@@ -265,6 +267,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,
|
|
@@ -283,6 +290,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.12.4/Lib/test/test_ensurepip.py
|
|
===================================================================
|
|
--- Python-3.12.4.orig/Lib/test/test_ensurepip.py
|
|
+++ Python-3.12.4/Lib/test/test_ensurepip.py
|
|
@@ -105,6 +105,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/",
|
|
+ "pip",
|
|
+ ],
|
|
+ unittest.mock.ANY,
|
|
+ )
|
|
+
|
|
def test_bootstrapping_with_user(self):
|
|
ensurepip.bootstrap(user=True)
|
|
|
|
Index: Python-3.12.4/Makefile.pre.in
|
|
===================================================================
|
|
--- Python-3.12.4.orig/Makefile.pre.in
|
|
+++ Python-3.12.4/Makefile.pre.in
|
|
@@ -1914,7 +1914,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoni
|
|
install|*) ensurepip="" ;; \
|
|
esac; \
|
|
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
|
|
- $$ensurepip --root=$(DESTDIR)/ ; \
|
|
+ $$ensurepip --root=$(DESTDIR)/ --prefix=$(prefix) ; \
|
|
fi
|
|
|
|
.PHONY: altinstall
|
|
@@ -1925,7 +1925,7 @@ altinstall: commoninstall
|
|
install|*) ensurepip="--altinstall" ;; \
|
|
esac; \
|
|
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
|
|
- $$ensurepip --root=$(DESTDIR)/ ; \
|
|
+ $$ensurepip --root=$(DESTDIR)/ --prefix=$(prefix) ; \
|
|
fi
|
|
|
|
.PHONY: commoninstall
|
|
Index: Python-3.12.4/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ Python-3.12.4/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`.
|