There's a global option
require-virtualenv to require a virtual environment when operating
Several ways to enable this (pick one):
As configuration option (which has my preference) like this, in e.g.
require-virtualenv = True
You can also run this command to modify/create the configuration
file for you:
pip config set global.require-virtualenv True
Use the environment variable
PIP_REQUIRE_VIRTUALENV and set it to value
Directly using the
--require-virtualenv command line option.
If you would then attempt to install packages outside of a virtualenv, you'll see this error:
ERROR: Could not find an activated virtualenv (required).
If you need to override this option temporarily for upgrading pip or installing virtualenv on older Python versions, you can prepend the command with
N.B.: This option appears to be missing from the
--help output and docs as a whole in older pip versions (< 22.0), but it's working just fine for me. Tested with 20.3.4 as latest version on Python 2.7.x.
Sidenote: PEP 704 (Draft at the time of writing) is a proposal to "[...] recommends that package installers like pip require a virtual environment by default on Python 3.13+".