Files
gentoo/dev-python/pip/files/pip-26.2.1-unbundle.patch
Michał Górny 0edb859bde dev-python/pip: Bump to 26.2.1
Signed-off-by: Michał Górny <mgorny@gentoo.org>
2026-09-12 17:57:59 +02:00

259 lines
11 KiB
Diff

diff --git a/src/pip/_internal/cli/main_parser.py b/src/pip/_internal/cli/main_parser.py
index 903c89112..558a0d5a0 100644
--- a/src/pip/_internal/cli/main_parser.py
+++ b/src/pip/_internal/cli/main_parser.py
@@ -81,6 +81,11 @@ def parse_command(args: list[str]) -> tuple[str, list[str]]:
# --python
if general_options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ:
+ raise CommandError(
+ "--python option is not supported on Gentoo, as it requires bundled "
+ "dependencies that have been removed to improve security"
+ )
+
# Re-invoke pip using the specified Python interpreter
interpreter = identify_python_interpreter(general_options.python)
if interpreter is None:
diff --git a/src/pip/_internal/commands/debug.py b/src/pip/_internal/commands/debug.py
index 4e8178d0a..b42a12064 100644
--- a/src/pip/_internal/commands/debug.py
+++ b/src/pip/_internal/commands/debug.py
@@ -7,7 +7,6 @@ from optparse import Values
from types import ModuleType
from typing import Any
-import pip._vendor
from pip._vendor.certifi import where
from pip._vendor.packaging.version import parse as parse_version
@@ -186,9 +185,7 @@ class DebugCommand(Command):
show_value("REQUESTS_CA_BUNDLE", os.environ.get("REQUESTS_CA_BUNDLE"))
show_value("CURL_CA_BUNDLE", os.environ.get("CURL_CA_BUNDLE"))
show_value("pip._vendor.certifi.where()", where())
- show_value("pip._vendor.DEBUNDLED", pip._vendor.DEBUNDLED)
-
- show_vendor_versions()
+ show_value("pip._vendor.DEBUNDLED", True)
show_tags(options)
diff --git a/src/pip/_internal/commands/install.py b/src/pip/_internal/commands/install.py
index e1482b9cd..cc5758c1f 100644
--- a/src/pip/_internal/commands/install.py
+++ b/src/pip/_internal/commands/install.py
@@ -546,13 +546,6 @@ class InstallCommand(RequirementCommand):
if options.target_dir or options.prefix_path:
warn_script_location = False
- # Warn on late imports so we don't silently pick up a module
- # from a distribution pip is about to install.
- try:
- _eagerly_import_modules()
- finally:
- _prevent_further_imports()
-
installed = install_given_reqs(
to_install,
root=options.root_path,
diff --git a/tests/conftest.py b/tests/conftest.py
index c1a3d60ce..0b2b5fd98 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -532,9 +532,6 @@ def virtualenv_template(
tmpdir_factory: pytest.TempPathFactory,
pip_src: Path,
pip_editable_parts: tuple[Path, ...],
- setuptools_install: Path,
- coverage_install: Path,
- socket_install: Path,
) -> VirtualEnvironment:
venv_type: VirtualEnvironmentType
if request.config.getoption("--use-venv"):
@@ -546,13 +543,6 @@ def virtualenv_template(
tmpdir = tmpdir_factory.mktemp("virtualenv")
venv = VirtualEnvironment(tmpdir.joinpath("venv_orig"), venv_type=venv_type)
- # Install setuptools, pytest-subket, and pip.
- install_pth_link(venv, "setuptools", setuptools_install)
- install_pth_link(venv, "pytest_subket", socket_install)
- # Also copy pytest-subket's .pth file so it can intercept socket calls.
- with open(venv.site / "pytest_socket.pth", "w") as f:
- f.write(socket_install.joinpath("pytest_socket.pth").read_text())
-
pth, dist_info = pip_editable_parts
shutil.copy(pth, venv.site)
@@ -564,14 +554,6 @@ def virtualenv_template(
# detects changed files.
venv.site.joinpath("easy-install.pth").touch()
- if request.config.getoption("--cov"):
- # Install coverage and pth file for executing it in any spawned processes
- # in this virtual environment.
- install_pth_link(venv, "coverage", coverage_install)
- # zz prefix ensures the file is after easy-install.pth.
- with open(venv.site / "zz-coverage-helper.pth", "a") as f:
- f.write("import coverage; coverage.process_startup()")
-
# Drop (non-relocatable) launchers.
for exe in os.listdir(venv.bin):
if not exe.startswith(("python", "libpy")): # Don't remove libpypy-c.so...
diff --git a/tests/functional/test_check.py b/tests/functional/test_check.py
index acf99bc13..5425002e7 100644
--- a/tests/functional/test_check.py
+++ b/tests/functional/test_check.py
@@ -10,10 +10,8 @@ from tests.lib import (
def matches_expected_lines(string: str, expected_lines: Collection[str]) -> bool:
# Ignore empty lines
output_lines = list(filter(None, string.splitlines()))
- # We'll match the last n lines, given n lines to match.
- last_few_output_lines = output_lines[-len(expected_lines) :]
# And order does not matter
- return set(last_few_output_lines) == set(expected_lines)
+ return set(expected_lines).issubset(set(output_lines))
def test_basic_check_clean(script: PipTestEnvironment) -> None:
diff --git a/tests/functional/test_freeze.py b/tests/functional/test_freeze.py
index 92e55aca6..e6d5f6d51 100644
--- a/tests/functional/test_freeze.py
+++ b/tests/functional/test_freeze.py
@@ -75,8 +75,8 @@ def test_basic_freeze(script: PipTestEnvironment) -> None:
)
result = script.pip("freeze", expect_stderr=True)
expected = textwrap.dedent("""\
- ...simple==2.0
- simple2==3.0...
+ ...simple==2.0...
+ ...simple2==3.0...
<BLANKLINE>""")
_check_output(result.stdout, expected)
@@ -881,7 +881,7 @@ def test_freeze_skip_work_dir_pkg(script: PipTestEnvironment) -> None:
# Freeze should not include package simple when run from package directory
result = script.pip("freeze", cwd=pkg_path)
- assert "simple" not in result.stdout
+ assert "\nsimple==" not in result.stdout
def test_freeze_include_work_dir_pkg(script: PipTestEnvironment) -> None:
diff --git a/tests/functional/test_install_check.py b/tests/functional/test_install_check.py
index cb8312b53..174bb8f66 100644
--- a/tests/functional/test_install_check.py
+++ b/tests/functional/test_install_check.py
@@ -61,6 +61,7 @@ def test_check_install_canonicalization(script: PipTestEnvironment) -> None:
)
assert "requires" not in result.stderr
assert result.returncode == 0
+ return
# Double check that all errors are resolved in the end
result = script.pip("check")
diff --git a/tests/functional/test_list.py b/tests/functional/test_list.py
index 1acc28254..c10dd70ed 100644
--- a/tests/functional/test_list.py
+++ b/tests/functional/test_list.py
@@ -1,5 +1,6 @@
import json
import os
+import re
from pathlib import Path
import pytest
@@ -43,8 +44,8 @@ def test_basic_list(simple_script: PipTestEnvironment) -> None:
"""
result = simple_script.pip("list")
- assert "simple 1.0" in result.stdout, str(result)
- assert "simple2 3.0" in result.stdout, str(result)
+ assert re.search(r"simple\s+1\.0", result.stdout), str(result)
+ assert re.search(r"simple2\s+3\.0", result.stdout), str(result)
def test_verbose_flag(simple_script: PipTestEnvironment) -> None:
@@ -56,8 +57,8 @@ def test_verbose_flag(simple_script: PipTestEnvironment) -> None:
assert "Version" in result.stdout, str(result)
assert "Location" in result.stdout, str(result)
assert "Installer" in result.stdout, str(result)
- assert "simple 1.0" in result.stdout, str(result)
- assert "simple2 3.0" in result.stdout, str(result)
+ assert re.search(r"simple\s+1\.0", result.stdout), str(result)
+ assert re.search(r"simple2\s+3\.0", result.stdout), str(result)
def test_columns_flag(simple_script: PipTestEnvironment) -> None:
@@ -68,8 +69,8 @@ def test_columns_flag(simple_script: PipTestEnvironment) -> None:
assert "Package" in result.stdout, str(result)
assert "Version" in result.stdout, str(result)
assert "simple (1.0)" not in result.stdout, str(result)
- assert "simple 1.0" in result.stdout, str(result)
- assert "simple2 3.0" in result.stdout, str(result)
+ assert re.search(r"simple\s+1\.0", result.stdout), str(result)
+ assert re.search(r"simple2\s+3\.0", result.stdout), str(result)
def test_format_priority(simple_script: PipTestEnvironment) -> None:
@@ -81,16 +82,16 @@ def test_format_priority(simple_script: PipTestEnvironment) -> None:
)
assert "simple==1.0" in result.stdout, str(result)
assert "simple2==3.0" in result.stdout, str(result)
- assert "simple 1.0" not in result.stdout, str(result)
- assert "simple2 3.0" not in result.stdout, str(result)
+ assert not re.search(r"simple\s+1\.0", result.stdout), str(result)
+ assert not re.search(r"simple2\s+3\.0", result.stdout), str(result)
result = simple_script.pip("list", "--format=freeze", "--format=columns")
assert "Package" in result.stdout, str(result)
assert "Version" in result.stdout, str(result)
assert "simple==1.0" not in result.stdout, str(result)
assert "simple2==3.0" not in result.stdout, str(result)
- assert "simple 1.0" in result.stdout, str(result)
- assert "simple2 3.0" in result.stdout, str(result)
+ assert re.search(r"simple\s+1\.0", result.stdout), str(result)
+ assert re.search(r"simple2\s+3\.0", result.stdout), str(result)
def test_local_flag(simple_script: PipTestEnvironment) -> None:
@@ -126,8 +127,8 @@ def test_multiple_exclude_and_normalization(
assert "Normalizable_Name" in result.stdout
assert "pip" in result.stdout
result = script.pip("list", "--exclude", "normalizablE-namE", "--exclude", "pIp")
- assert "Normalizable_Name" not in result.stdout
- assert "pip" not in result.stdout
+ assert "Normalizable_Name " not in result.stdout
+ assert "pip " not in result.stdout
@pytest.mark.usefixtures("enable_user_site")
diff --git a/tests/lib/venv.py b/tests/lib/venv.py
index a5d8704b2..81438f12e 100644
--- a/tests/lib/venv.py
+++ b/tests/lib/venv.py
@@ -9,6 +9,7 @@ import venv as _venv
from pathlib import Path
from typing import Literal
+import pytest
import virtualenv as _virtualenv
VirtualEnvironmentType = Literal["virtualenv", "venv"]
@@ -35,7 +36,7 @@ class VirtualEnvironment:
self._venv_type = venv_type
else:
self._venv_type = "virtualenv"
- self._user_site_packages = False
+ self._user_site_packages = True
self._template = template
self._sitecustomize: str | None = None
self._update_paths()
@@ -155,6 +156,8 @@ class VirtualEnvironment:
@user_site_packages.setter
def user_site_packages(self, value: bool) -> None:
+ if not value:
+ pytest.skip("Gentoo: skipping due to lack of system site-packages")
self._user_site_packages = value
self._rewrite_pyvenv_cfg(
{"include-system-site-packages": str(bool(value)).lower()}