任何方式来判断用户的python环境是否是anaconda

bad*_*eas 11 python anaconda

我正在分发一个内部python lib,我希望这样做,如果用户在运行此文件时使用anaconda,将自动更新库的依赖项.(这是请求.如果由我决定,我会让用户控制他们自己的包.)

到目前为止,我想出了类似的东西

def _user_has_conda():
    cmd = 'conda --help'
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = p.communicate()
    if len(out) > 0 and len(err) == 0:
        return True
    else:
        return False
Run Code Online (Sandbox Code Playgroud)

但这实际上只告诉我用户是否在他们的系统上安装了anaconda,而不是当前的python进程是否在anaconda环境中运行.

我注意到当我启动python或ipython shell时,我看到"Python 3.3.3 | Continuum Analytics,Inc |" 在顶部.我的下一个想法是尝试找到如何获取此字符串以查看是否存在"Continuum Analytics",如果存在,则假设用户在anaconda中运行.

我相信那里有更好的想法,这就是我在这里的原因.

谢谢.

Ian*_*nSR 16

我来自Continuum,所以让我快速说明一下:sys.version根据你是否曾经conda安装过Anaconda Python Distribution或者只是Python,你会得到一个不同的字符串.所以从conda create -n full_apd anaconda你得到一个sys.version字符串如下:

$ python -c "import sys; print sys.version"
2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Jan 10 2014, 11:23:15) 
[GCC 4.0.1 (Apple Inc. build 5493)]
Run Code Online (Sandbox Code Playgroud)

如果您使用miniconda或正在conda您刚刚指定的环境python(例如conda create -n base_py27 python=2.7)工作,那么这就是您所获得的:

$ python -c "import sys; print sys.version"
2.7.6 |Continuum Analytics, Inc.| (default, Jan 10 2014, 11:23:15) 
[GCC 4.0.1 (Apple Inc. build 5493)]
Run Code Online (Sandbox Code Playgroud)

如果您只是直接下载并安装了完整的Anaconda Python Distribution,那么您将获得前者:

$ python -c "import sys; print sys.version"
2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Jan 10 2014, 11:23:15) 
[GCC 4.0.1 (Apple Inc. build 5493)]
Run Code Online (Sandbox Code Playgroud)


zha*_*hen 12

In [109]: import sys

In [110]: 'conda' in sys.version
Out[110]: True
Run Code Online (Sandbox Code Playgroud)


ilj*_*jau 6

文档:http://docs.python.org/2/library/sys.html#sys.version

In [1]: import sys; sys.version
Out[1]: '2.7.5 |Anaconda 1.8.0 (64-bit)| (default, Jul  1 2013, 12:37:52) [MSC v.1500 64 bit (AMD64)]'
Run Code Online (Sandbox Code Playgroud)