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 dc637d87635..6932f5a6d8b 100644 --- a/src/pip/_internal/commands/install.py +++ b/src/pip/_internal/commands/install.py @@ -35,7 +35,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, @@ -725,7 +728,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