是否有可能确定当前脚本是否在virtualenv环境中运行?


当前回答

它不是万无一失的,但是对于UNIX环境的简单测试,比如

if run("which python3").find("venv") == -1:
    # something when not executed from venv

对我来说很好。这比测试现有的某些属性要简单得多,无论如何,您应该将venv目录命名为venv。

其他回答

最简单的方法是运行:哪个python,如果你在virtualenv中,它会指向它的python,而不是全局的

检查$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中完成。

它不是万无一失的,但是对于UNIX环境的简单测试,比如

if run("which python3").find("venv") == -1:
    # something when not executed from venv

对我来说很好。这比测试现有的某些属性要简单得多,无论如何,您应该将venv目录命名为venv。

你可以选择哪个python,看看它是否指向虚拟环境中的那个。

检查你的Virtualenv内部:

import os

if os.getenv('VIRTUAL_ENV'):
    print('Using Virtualenv')
else:
    print('Not using Virtualenv')

您还可以获得有关您的环境的更多数据:

import sys
import os

print(f'Python Executable: {sys.executable}')
print(f'Python Version: {sys.version}')
print(f'Virtualenv: {os.getenv("VIRTUAL_ENV")}')