是否有可能确定当前脚本是否在virtualenv环境中运行?
当前回答
在windows操作系统中,你会看到这样的东西:
C:\Users\yourusername\virtualEnvName\Scripts>activate
(virtualEnvName) C:\Users\yourusername\virtualEnvName\Scripts>
括号表示您实际处于名为“virtualEnvName”的虚拟环境中。
其他回答
检查$VIRTUAL_ENV环境变量。
在活动的虚拟环境中,$VIRTUAL_ENV环境变量包含虚拟环境的目录。
>>> import os
>>> os.environ['VIRTUAL_ENV']
'/some/path/project/venv'
一旦执行deactivate / leave虚拟环境,$VIRTUAL_ENV变量将被清除/空。Python将引发一个KeyError,因为环境变量未设置。
>>> import os
>>> os.environ['VIRTUAL_ENV']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 678, in __getitem__
raise KeyError(key) from None
KeyError: 'VIRTUAL_ENV'
当然,这些相同的环境变量检查也可以在Python脚本之外的shell中完成。
(编辑)我是这样发现的,你怎么看?(它还返回venv的基本路径,甚至适用于不检查env变量的readthedocs):
import os
import sys
from distutils.sysconfig import get_config_vars
def get_venv_basedir():
"""Returns the base directory of the virtualenv, useful to read configuration and plugins"""
exec_prefix = get_config_vars()['exec_prefix']
if hasattr(sys, 'real_prefix') is False or exec_prefix.startswith(sys.real_prefix):
raise EnvironmentError('You must be in a virtual environment')
return os.path.abspath(get_config_vars()['exec_prefix'] + '/../')
这里已经发布了很多很棒的方法,但只需要再添加一个:
import site
site.getsitepackages()
告诉您PIP安装包的位置。
如果你正在使用水蟒,这里是解决方案。该命令列出所有可发现的环境
conda info --envs
最简单的方法是运行:哪个python,如果你在virtualenv中,它会指向它的python,而不是全局的