Asked By – miracle2k
Is it possible to determine if the current script is running inside a virtualenv environment?
Now we will see solution for issue: Determine if Python is running inside virtualenv
The most reliable way to check for this is to check whether
sys.prefix == sys.base_prefix. If they are equal, you are not in a virtual environment; if they are unequal, you are. Inside a virtual environment,
sys.prefix points to the virtual environment, and
sys.base_prefix is the prefix of the system Python the virtualenv was created from.
The above always works for Python 3 stdlib
venv and for recent
virtualenv (since version 20). Older versions of
sys.real_prefix instead of
sys.real_prefix did not exist outside a virtual environment), and in Python 3.3 and earlier
sys.base_prefix did not ever exist. So a fully robust check that handles all of these cases could look like this:
import sys def get_base_prefix_compat(): """Get base/real prefix, or sys.prefix if there is none.""" return getattr(sys, "base_prefix", None) or getattr(sys, "real_prefix", None) or sys.prefix def in_virtualenv(): return get_base_prefix_compat() != sys.prefix
If you only care about supported Python versions and latest
virtualenv, you can replace
get_base_prefix_compat() with simply
VIRTUAL_ENV environment variable is not reliable. It is set by the virtualenv
activate shell script, but a virtualenv can be used without activation by directly running an executable from the virtualenv’s
Scripts) directory, in which case
$VIRTUAL_ENV will not be set. Or a non-virtualenv Python binary can be executed directly while a virtualenv is activated in the shell, in which case
$VIRTUAL_ENV may be set in a Python process that is not actually running in that virtualenv.