是否有可能确定当前脚本是否在virtualenv环境中运行?
当前回答
这是对卡尔·迈耶的公认答案的改进。它可以与Python 3和2中的virtualenv一起工作,也可以与Python 3中的venv模块一起工作:
import sys
def is_venv():
return (hasattr(sys, 'real_prefix') or
(hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix))
检查sys。Real_prefix覆盖了virtualenv,非空的sys。带sys的Base_prefix。前缀覆盖venv。
考虑一个像这样使用函数的脚本:
if is_venv():
print('inside virtualenv or venv')
else:
print('outside virtualenv or venv')
以及下面的调用:
$ python2 test.py
outside virtualenv or venv
$ python3 test.py
outside virtualenv or venv
$ python2 -m virtualenv virtualenv2
...
$ . virtualenv2/bin/activate
(virtualenv2) $ python test.py
inside virtualenv or venv
(virtualenv2) $ deactivate
$ python3 -m virtualenv virtualenv3
...
$ . virtualenv3/bin/activate
(virtualenv3) $ python test.py
inside virtualenv or venv
(virtualenv3) $ deactivate
$ python3 -m venv venv3
$ . venv3/bin/activate
(venv3) $ python test.py
inside virtualenv or venv
(venv3) $ deactivate
其他回答
如果你正在使用水蟒,这里是解决方案。该命令列出所有可发现的环境
conda info --envs
你可以选择哪个python,看看它是否指向虚拟环境中的那个。
根据http://www.python.org/dev/peps/pep-0405/#specification上的virtualenv pep,你可以使用sys。前缀代替os.environ['VIRTUAL_ENV']。
sys。Real_prefix在我的virtualenv中不存在,sys.base_prefix也是如此。
最简单的方法是运行:哪个python,如果你在virtualenv中,它会指向它的python,而不是全局的
在windows操作系统中,你会看到这样的东西:
C:\Users\yourusername\virtualEnvName\Scripts>activate
(virtualEnvName) C:\Users\yourusername\virtualEnvName\Scripts>
括号表示您实际处于名为“virtualEnvName”的虚拟环境中。
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录