From f171ebcdd2a4f9bb99a0d6de4959a39f46643f1a Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Fri, 8 Oct 2021 17:37:05 +0100 Subject: [PATCH] Fix the protect-pip-on-windows logic --- src/pip/_internal/commands/install.py | 6 +++--- tests/functional/test_install_upgrade.py | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pip/_internal/commands/install.py b/src/pip/_internal/commands/install.py index eedb1ff5d64..5e441c4d093 100644 --- a/src/pip/_internal/commands/install.py +++ b/src/pip/_internal/commands/install.py @@ -344,9 +344,9 @@ def run(self, options: Values, args: List[str]) -> int: except KeyError: modifying_pip = False else: - # If we're not replacing an already installed pip, - # we're not modifying it. - modifying_pip = pip_req.satisfied_by is None + # If we're replacing an already installed pip, we're modifying it. + modifying_pip = pip_req.satisfied_by is not None + protect_pip_from_modification_on_windows(modifying_pip=modifying_pip) check_binary_allowed = get_check_binary_allowed(finder.format_control) diff --git a/tests/functional/test_install_upgrade.py b/tests/functional/test_install_upgrade.py index 5d55a0d7670..393bfd29a91 100644 --- a/tests/functional/test_install_upgrade.py +++ b/tests/functional/test_install_upgrade.py @@ -1,5 +1,6 @@ import itertools import os +import sys import textwrap import pytest @@ -396,3 +397,11 @@ def test_install_find_existing_package_canonicalize(script, req1, req2): ) satisfied_message = f"Requirement already satisfied: {req2}" assert satisfied_message in result.stdout, str(result) + + +@pytest.mark.skipif(sys.platform != "win32", reason="Windows-only test") +def test_modifying_pip_presents_error(script): + result = script.pip("install", "pip", "--force-reinstall", expect_error=True) + + assert "python.exe" in result.stderr, str(result) + assert " -m " in result.stderr, str(result)