How can a shell function know if it is running within a virtualenv?
bash, python, shell, virtualenv
Solution
Actually, I just found a similar question, from which one can easily derive an answer to this one:
Python: Determine if running inside virtualenv
E.g., a shell script can use something like
python -c 'import sys; print (sys.real_prefix)' 2>/dev/null && INVENV=1 || INVENV=0
(Thanks to Christian Long for showing how to make this solution work with Python 3 also.)
EDIT: Here's a more direct (hence clearer and cleaner) solution (taking a cue from JuanPablo's comment):
INVENV=$(python -c 'import sys; print ("1" if hasattr(sys, "real_prefix") else "0")')
Problem
How should a `bash` function test whether it is running inside a Python virtualenv? The two approaches that come to mind are: ``` [[ "$(type -t deactivate)" != function ]]; INVENV=$? ``` or ``` [[ "x$(which python)" != "x$VIRTUAL_ENV/bin/python" ]]; INVENV=$? ``` (Note: wanting `$INVENV` to be 1 if we're inside a virtualenv, and 0 otherwise, is what forces the backward-looking tests above.) Is there something less hacky?