Skip to content

Commit 25861e5

Browse files
authored
Merge pull request #10560 from pradyunsg/fix-protect-pip-on-windows
Fix the protect-pip-on-windows logic
2 parents 856a6ba + 4912fdf commit 25861e5

File tree

4 files changed

+17
-4
lines changed

4 files changed

+17
-4
lines changed

news/10560.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix conditional checks to prevent ``pip.exe`` from trying to modify itself, on Windows.

src/pip/_internal/utils/misc.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -556,9 +556,9 @@ def protect_pip_from_modification_on_windows(modifying_pip: bool) -> None:
556556
python -m pip ...
557557
"""
558558
pip_names = [
559-
"pip.exe",
560-
"pip{}.exe".format(sys.version_info[0]),
561-
"pip{}.{}.exe".format(*sys.version_info[:2]),
559+
"pip",
560+
f"pip{sys.version_info.major}",
561+
f"pip{sys.version_info.major}.{sys.version_info.minor}",
562562
]
563563

564564
# See https://github.com/pypa/pip/issues/1299 for more discussion

tests/functional/test_install_upgrade.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import itertools
22
import os
3+
import sys
34
import textwrap
45

56
import pytest
@@ -411,3 +412,14 @@ def test_install_find_existing_package_canonicalize(
411412
)
412413
satisfied_message = f"Requirement already satisfied: {req2}"
413414
assert satisfied_message in result.stdout, str(result)
415+
416+
417+
@pytest.mark.network
418+
@pytest.mark.skipif(sys.platform != "win32", reason="Windows-only test")
419+
def test_modifying_pip_presents_error(script: PipTestEnvironment) -> None:
420+
result = script.pip(
421+
"install", "pip", "--force-reinstall", use_module=False, expect_error=True
422+
)
423+
424+
assert "python.exe" in result.stderr or "python.EXE" in result.stderr, str(result)
425+
assert " -m " in result.stderr, str(result)

tests/lib/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ def run(
666666
if expect_error and not allow_error:
667667
if result.returncode == 0:
668668
__tracebackhide__ = True
669-
raise AssertionError("Script passed unexpectedly.")
669+
raise AssertionError(f"Script passed unexpectedly:\n{result}")
670670

671671
_check_stderr(
672672
result.stderr,

0 commit comments

Comments
 (0)