我正在分发一个内部的python库,我希望这样做,如果用户在运行此文件时使用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
但这实际上只告诉我用户是否在他们的系统上安装了anaconda,而不是当前的python进程是否在anaconda环境中运行。
我注意到当我启动python或ipython shell时,我看到“Python 3.3.3 | Continuum Analytics,Inc |”在顶部。我的下一个想法是尝试找到如何获取此字符串以查看是否存在“Continuum Analytics”,如果存在,则假设用户在anaconda中运行。
我确信那里有更好的想法,这就是我在这里的原因。
谢谢。答案 0 :(得分:15)
我来自Continuum,所以让我快速说明一下:根据您是否使用sys.version
安装 Anaconda Python发布版conda字符串或者只是 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)]
如果您使用miniconda
或在刚刚指定conda
的{{1}}环境中工作(例如python
),则可获得以下内容:
conda create -n base_py27 python=2.7
如果您只是直接下载并安装了完整的Anaconda Python Distribution,那么您将获得前者:
$ 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)]
答案 1 :(得分:11)
In [109]: import sys
In [110]: 'conda' in sys.version
Out[110]: True
对于版本> 3.7,版本信息已更改如下:
In [2]: sys.version
Out[2]: '3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)]'
来自this post 解决方案应更改为:
import sys, os
is_conda = os.path.exists(os.path.join(sys.prefix, 'conda-meta'))
答案 2 :(得分: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)]'