dev-python/ensurepip-pip: Switch to building from source

Build the installed wheel from source rather than fetching the upstream
wheel.  This is going to make it easier to patch bugs, and it enables
users to apply user patches.  Additionally, we are effectively extending
test coverage, since dev-python/pip is only testing the unbundled
variant.

Signed-off-by: Michał Górny <mgorny@gentoo.org>
Part-of: https://github.com/gentoo/gentoo/pull/42882
Closes: https://github.com/gentoo/gentoo/pull/42882
Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
Michał Górny 2025-07-05 17:08:48 +02:00
parent c017c6384e
commit e8f4b3407b
No known key found for this signature in database
GPG Key ID: 639ADAE2329E240E
4 changed files with 197 additions and 7 deletions

View File

@ -1,3 +1,4 @@
DIST pip-25.0.1-py3-none-any.whl 1841526 BLAKE2B 928210cf0586b2e17cf96c341babbbf612eb08775af716588fad8840d04153d264b64098f97c8d2d7b219389d571cee8e4190195f8c5cc9f602749aad92df437 SHA512 48315489f2c0a76b49386228f9a2f675e71f20ff2f4aaaf65b2634ba5cac7c98facfbdebeb4651c65efdd2ade053a140d7a2a6b44587549d6663bc8bb5ef2220
DIST pip-25.1-py3-none-any.whl 1824948 BLAKE2B a237c46c680afca0b72da704db8f390f9723e1a9d262b31d3d1dc7c89adff2dd6908768cdbeff5dc621ade7d68ce056ec1c6373b1b500da3a098d9f9798ad925 SHA512 1f669dce82d5e9238dc4cb776097f96179be9dbacf18a825a0845437cc4c234ab5242009e8d7d5b0d383bc339d0759ea408668b8d7076861d35da275c0d0fbfe
DIST pip-25.1.1-py3-none-any.whl 1825227 BLAKE2B 13170fa08dd26edced5e5fe8d89b38f5b3b63882489d2a951a7238f950a332ce0df11109482840595984bca187960d8fe2b7aeabfcbdaf94e5586631cc1de4e3 SHA512 e0c56f04a306cba9e13ed87f7460ad5a3bda7d6c37e05098082c58acb1f7493c8061e48df279f2c476e75d12df12d0f1a74d82e00e6fc2badffe484d281c56fc
DIST pip-25.1.1.gh.tar.gz 9219969 BLAKE2B eb443451deeb71888c2fc56ac5c8cb2d0515ec0efff975fab98cfa65d1fc5e66948243b3acebf1f4b0446e46082abb9fd350816579a4f5af1292c160490ce930 SHA512 ce61c9861265139b3c5ea9be9dc246097cd75c21687cf8301f80a377d02420c4524f0d6307d2ca0232ff8715b1105343bcfdb9cac6b69503780ab2c4645558dc

View File

@ -0,0 +1,145 @@
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DISTUTILS_USE_PEP517=setuptools
# PYTHON_COMPAT is used only for testing
PYTHON_COMPAT=( pypy3_11 python3_{11..14} )
PYTHON_REQ_USE="ssl(+),threads(+)"
inherit distutils-r1
MY_P=${P#ensurepip-}
DESCRIPTION="Shared pip wheel for ensurepip Python module"
HOMEPAGE="
https://pip.pypa.io/en/stable/
https://pypi.org/project/pip/
https://github.com/pypa/pip/
"
SRC_URI="
https://github.com/pypa/pip/archive/${PV}.tar.gz -> ${MY_P}.gh.tar.gz
"
S=${WORKDIR}/${MY_P}
LICENSE="Apache-2.0 BSD BSD-2 ISC LGPL-2.1+ MIT MPL-2.0 PSF-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
IUSE="test test-rust"
RESTRICT="!test? ( test )"
BDEPEND="
${RDEPEND}
test? (
<dev-python/ensurepip-setuptools-80
dev-python/ensurepip-wheel
dev-python/freezegun[${PYTHON_USEDEP}]
dev-python/pretend[${PYTHON_USEDEP}]
dev-python/scripttest[${PYTHON_USEDEP}]
dev-python/virtualenv[${PYTHON_USEDEP}]
dev-python/werkzeug[${PYTHON_USEDEP}]
dev-python/wheel[${PYTHON_USEDEP}]
test-rust? (
dev-python/cryptography[${PYTHON_USEDEP}]
)
dev-vcs/git
)
"
EPYTEST_PLUGINS=( pytest-rerunfailures )
EPYTEST_XDIST=1
distutils_enable_tests pytest
python_prepare_all() {
local PATCHES=(
"${FILESDIR}/pip-23.1-no-coverage.patch"
)
distutils-r1_python_prepare_all
if use test; then
local wheels=(
"${BROOT}"/usr/lib/python/ensurepip/{setuptools,wheel}-*.whl
)
mkdir tests/data/common_wheels/ || die
cp "${wheels[@]}" tests/data/common_wheels/ || die
fi
}
python_test() {
local EPYTEST_DESELECT=(
tests/functional/test_inspect.py::test_inspect_basic
# Internet
tests/functional/test_config_settings.py::test_backend_sees_config_via_sdist
tests/functional/test_install.py::test_double_install_fail
tests/functional/test_install.py::test_install_sdist_links
tests/functional/test_install_config.py::test_prompt_for_keyring_if_needed
tests/functional/test_lock.py::test_lock_archive
tests/functional/test_lock.py::test_lock_vcs
# broken by system site-packages use
tests/functional/test_freeze.py::test_freeze_with_setuptools
tests/functional/test_pip_runner_script.py::test_runner_work_in_environments_with_no_pip
tests/functional/test_uninstall.py::test_basic_uninstall_distutils
tests/unit/test_base_command.py::test_base_command_global_tempdir_cleanup
tests/unit/test_base_command.py::test_base_command_local_tempdir_cleanup
tests/unit/test_base_command.py::test_base_command_provides_tempdir_helpers
)
local EPYTEST_IGNORE=(
# requires proxy.py
tests/functional/test_proxy.py
)
case ${EPYTHON} in
pypy3*)
EPYTEST_DESELECT+=(
# unexpected tempfiles?
tests/functional/test_install_config.py::test_do_not_prompt_for_authentication
tests/functional/test_install_config.py::test_prompt_for_authentication
)
;;
python3.14*)
EPYTEST_DESELECT+=(
# TODO: segfaults
tests/unit/test_collector.py::test_get_index_content_directory_append_index
# https://github.com/python/cpython/issues/125974
tests/unit/test_collector.py::test_ensure_quoted_url
tests/unit/test_finder.py::test_finder_priority_file_over_page
tests/unit/test_urls.py::test_path_to_url_unix
tests/unit/test_collector.py::test_clean_url_path
tests/unit/test_collector.py::test_clean_url_path_with_local_path
tests/unit/test_req.py::TestRequirementSet::test_download_info_local_editable_dir
tests/unit/test_req.py::test_parse_editable_local
tests/unit/test_req.py::test_parse_editable_local_extras
tests/unit/test_req.py::test_get_url_from_path__archive_file
tests/unit/test_req.py::test_get_url_from_path__installable_dir
tests/functional/test_lock.py::test_lock_wheel_from_findlinks
tests/functional/test_lock.py::test_lock_sdist_from_findlinks
tests/functional/test_lock.py::test_lock_local_editable_with_dep
)
;;
esac
if ! has_version "dev-python/cryptography[${PYTHON_USEDEP}]"; then
EPYTEST_DESELECT+=(
tests/functional/test_install.py::test_install_sends_client_cert
tests/functional/test_install_config.py::test_do_not_prompt_for_authentication
tests/functional/test_install_config.py::test_prompt_for_authentication
tests/functional/test_install_config.py::test_prompt_for_keyring_if_needed
)
fi
local -x PIP_DISABLE_PIP_VERSION_CHECK=1
# rerunfailures because test suite breaks if packages are installed
# in parallel
epytest -m "not network" -o tmp_path_retention_policy=all \
--reruns=5 --use-venv
}
src_install() {
if [[ ${DISTUTILS_WHEEL_PATH} != *py3-none-any.whl ]]; then
die "Non-pure wheel produced?! ${DISTUTILS_WHEEL_PATH}"
fi
# TODO: compress it?
insinto /usr/lib/python/ensurepip
doins "${DISTUTILS_WHEEL_PATH}"
}

View File

@ -0,0 +1,42 @@
From d915b0eec7b5844c06b5d8853544c8c5b538b0b9 Mon Sep 17 00:00:00 2001
From: Arthur Zamarin <arthurzam@gentoo.org>
Date: Fri, 29 Jul 2022 14:06:03 +0300
Subject: [PATCH] Disable coverage testing support inside test venvs
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -408,13 +408,6 @@ def wheel_install(tmpdir_factory: pytest.TempPathFactory, common_wheels: Path) -
return _common_wheel_editable_install(tmpdir_factory, common_wheels, "wheel")
-@pytest.fixture(scope="session")
-def coverage_install(
- tmpdir_factory: pytest.TempPathFactory, common_wheels: Path
-) -> Path:
- return _common_wheel_editable_install(tmpdir_factory, common_wheels, "coverage")
-
-
def install_pth_link(
venv: VirtualEnvironment, project_name: str, lib_dir: Path
) -> None:
@@ -431,3 +424,2 @@ def virtualenv_template(
setuptools_install: Path,
wheel_install: Path,
- coverage_install: Path,
@@ -457,13 +449,6 @@ def virtualenv_template(
[os.fspath(venv.bin / "python"), "setup.py", "-q", "develop"], cwd=pip_editable
)
- # 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 (
--
2.40.0

View File

@ -1,11 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="project">
<email>python@gentoo.org</email>
</maintainer>
<stabilize-allarches/>
<upstream>
<remote-id type="pypi">pip</remote-id>
</upstream>
<maintainer type="project">
<email>python@gentoo.org</email>
<name>Python</name>
</maintainer>
<stabilize-allarches/>
<upstream>
<remote-id type="pypi">pip</remote-id>
<remote-id type="github">pypa/pip</remote-id>
</upstream>
</pkgmetadata>