From 084fc617980ce5d346c020a5fd32ad3d670ab679 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 78cd0b5cf68..42af6a0399c 100644 --- a/src/pip/_internal/commands/install.py +++ b/src/pip/_internal/commands/install.py @@ -31,7 +31,10 @@ write_output, ) from pip._internal.utils.temp_dir import TempDirectory -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 ( BinaryAllowedPredicate, build, @@ -714,7 +717,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 5c623e679b7..dc8365efc78 100644 --- a/tests/unit/test_command_install.py +++ b/tests/unit/test_command_install.py @@ -4,6 +4,7 @@ import pytest 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