Skip to content

Commit

Permalink
Revert "mkvenv: work around broken pip installations on Debian 10"
Browse files Browse the repository at this point in the history
Debian 10 has Python 3.7, so it is not possible to use it anymore
now that Python 3.8 is required.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
bonzini committed Sep 7, 2023
1 parent 3e4b6b0 commit 0a88ac9
Showing 1 changed file with 16 additions and 58 deletions.
74 changes: 16 additions & 58 deletions python/scripts/mkvenv.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,6 @@
"""

# pylint: disable=too-many-lines

# Copyright (C) 2022-2023 Red Hat, Inc.
#
# Authors:
Expand Down Expand Up @@ -195,7 +193,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
):
kwargs["with_pip"] = False
else:
check_ensurepip(suggest_remedy=True)
check_ensurepip()

super().__init__(*args, **kwargs)

Expand Down Expand Up @@ -300,7 +298,7 @@ def need_ensurepip() -> bool:
return True


def check_ensurepip(prefix: str = "", suggest_remedy: bool = False) -> None:
def check_ensurepip() -> None:
"""
Check that we have ensurepip.
Expand All @@ -311,31 +309,25 @@ def check_ensurepip(prefix: str = "", suggest_remedy: bool = False) -> None:
"Python's ensurepip module is not found.\n"
"It's normally part of the Python standard library, "
"maybe your distribution packages it separately?\n"
"(Debian puts ensurepip in its python3-venv package.)\n"
"Either install ensurepip, or alleviate the need for it in the "
"first place by installing pip and setuptools for "
f"'{sys.executable}'.\n"
"(Hint: Debian puts ensurepip in its python3-venv package.)"
)
if suggest_remedy:
msg += (
"Either install ensurepip, or alleviate the need for it in the"
" first place by installing pip and setuptools for "
f"'{sys.executable}'.\n"
)
raise Ouch(prefix + msg)
raise Ouch(msg)

# ensurepip uses pyexpat, which can also go missing on us:
if not find_spec("pyexpat"):
msg = (
"Python's pyexpat module is not found.\n"
"It's normally part of the Python standard library, "
"maybe your distribution packages it separately?\n"
"(NetBSD's pkgsrc debundles this to e.g. 'py310-expat'.)\n"
"Either install pyexpat, or alleviate the need for it in the "
"first place by installing pip and setuptools for "
f"'{sys.executable}'.\n\n"
"(Hint: NetBSD's pkgsrc debundles this to e.g. 'py310-expat'.)"
)
if suggest_remedy:
msg += (
"Either install pyexpat, or alleviate the need for it in the "
"first place by installing pip and setuptools for "
f"'{sys.executable}'.\n"
)
raise Ouch(prefix + msg)
raise Ouch(msg)


def make_venv( # pylint: disable=too-many-arguments
Expand Down Expand Up @@ -489,38 +481,6 @@ def generate_console_scripts(
logger.debug("wrote console_script '%s'", filename)


def checkpip() -> bool:
"""
Debian10 has a pip that's broken when used inside of a virtual environment.
We try to detect and correct that case here.
"""
try:
# pylint: disable=import-outside-toplevel,unused-import,import-error
# pylint: disable=redefined-outer-name
import pip._internal # type: ignore # noqa: F401

logger.debug("pip appears to be working correctly.")
return False
except ModuleNotFoundError as exc:
if exc.name == "pip._internal":
# Uh, fair enough. They did say "internal".
# Let's just assume it's fine.
return False
logger.warning("pip appears to be malfunctioning: %s", str(exc))

check_ensurepip("pip appears to be non-functional, and ")

logger.debug("Attempting to repair pip ...")
subprocess.run(
(sys.executable, "-m", "ensurepip"),
stdout=subprocess.DEVNULL,
check=True,
)
logger.debug("Pip is now (hopefully) repaired!")
return True


def pkgname_from_depspec(dep_spec: str) -> str:
"""
Parse package name out of a PEP-508 depspec.
Expand Down Expand Up @@ -877,12 +837,10 @@ def post_venv_setup() -> None:
This is intended to be run *inside the venv* after it is created.
"""
logger.debug("post_venv_setup()")
# Test for a broken pip (Debian 10 or derivative?) and fix it if needed
if not checkpip():
# Finally, generate a 'pip' script so the venv is usable in a normal
# way from the CLI. This only happens when we inherited pip from a
# parent/system-site and haven't run ensurepip in some way.
generate_console_scripts(["pip"])
# Generate a 'pip' script so the venv is usable in a normal
# way from the CLI. This only happens when we inherited pip from a
# parent/system-site and haven't run ensurepip in some way.
generate_console_scripts(["pip"])


def _add_create_subcommand(subparsers: Any) -> None:
Expand Down

0 comments on commit 0a88ac9

Please sign in to comment.