From e803e7ac624fe81d080395a0cc3e9928f2dcb594 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 1 Jan 2021 21:57:45 +0800 Subject: [PATCH] Don't suggest --user in virtual environment --- news/9409.bugfix.rst | 2 ++ src/pip/_internal/commands/install.py | 7 +++++-- tests/unit/test_command_install.py | 4 +++- 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 news/9409.bugfix.rst diff --git a/news/9409.bugfix.rst b/news/9409.bugfix.rst new file mode 100644 index 00000000000..10cd36b1960 --- /dev/null +++ b/news/9409.bugfix.rst @@ -0,0 +1,2 @@ +``--user`` is no longer suggested incorrectly when pip fails with a permission +error in a virtual environment. diff --git a/src/pip/_internal/commands/install.py b/src/pip/_internal/commands/install.py index cd97ecb6042..14d7015ff2a 100644 --- a/src/pip/_internal/commands/install.py +++ b/src/pip/_internal/commands/install.py @@ -30,7 +30,10 @@ ) from pip._internal.utils.temp_dir import TempDirectory from pip._internal.utils.typing import MYPY_CHECK_RUNNING -from pip._internal.utils.virtualenv import virtualenv_no_global +from pip._internal.utils.virtualenv import ( + running_under_virtualenv, + virtualenv_no_global, +) from pip._internal.wheel_builder import build, should_build_for_install_command if MYPY_CHECK_RUNNING: @@ -722,7 +725,7 @@ def create_os_error_message(error, show_traceback, using_user_site): user_option_part = "Consider using the `--user` option" permissions_part = "Check the permissions" - if not using_user_site: + if not running_under_virtualenv() and not using_user_site: parts.extend([ user_option_part, " or ", permissions_part.lower(), diff --git a/tests/unit/test_command_install.py b/tests/unit/test_command_install.py index 66eb8ef3881..ce771936536 100644 --- a/tests/unit/test_command_install.py +++ b/tests/unit/test_command_install.py @@ -4,6 +4,7 @@ from mock import patch from pip._vendor.packaging.requirements import Requirement +from pip._internal.commands import install from pip._internal.commands.install import ( create_os_error_message, decide_user_install, @@ -109,7 +110,8 @@ def test_rejection_for_location_requirement_options(): ' permissions.\n'), ]) def test_create_os_error_message( - error, show_traceback, using_user_site, expected + monkeypatch, error, show_traceback, using_user_site, expected ): + monkeypatch.setattr(install, "running_under_virtualenv", lambda: False) msg = create_os_error_message(error, show_traceback, using_user_site) assert msg == expected