Get virtualenv's bin folder path from script Get virtualenv's bin folder path from script django django

Get virtualenv's bin folder path from script


The path to the virtual env is in the environment variable VIRTUAL_ENV

echo $VIRTUAL_ENV


The VIRTUAL_ENV environment variable is only available if the virtual environment is activated.

For instance:

$ python3 -m venv myapp$ source myapp/bin/activate(myapp) $ python  -c "import os; print(os.environ['VIRTUAL_ENV'])"/path/to/virtualenv/myapp

If not activated, you have an exception:

(myapp) $ deactivate$ myapp/bin/python -c "import os; print(os.environ['VIRTUAL_ENV'])"Traceback (most recent call last):  File "<string>", line 1, in <module>  File "/usr/lib64/python3.4/os.py", line 635, in __getitem__    raise KeyError(key) from NoneKeyError: 'VIRTUAL_ENV'

IMO, you should use sys.executable to get the path of your Python executable,and then build the path to celery:

import sysimport oscelery_name = {'linux': 'celery', 'win32': 'celery.exe'}[sys.platform]celery_path = os.path.join(os.path.dirname(sys.executable), celery_name)


How about referencing sys.prefix? It always outputs a result regardless of a virtualenv is activated or not, and also it's more convenient than getting grand parent position of sys.executable.

$ python -c 'import sys;print(sys.prefix)'/usr$ . venv/bin/activate(venv) $ python -c 'import sys;print(sys.prefix)'path/to/venv