是否有可能确定当前脚本是否在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,而不是全局的