我正在寻找一种很好的方法来计算我在运行代码或交互式python实例中的conda环境的名称.
用例是我使用miniconda安装的Python 2和Python 3内核运行Jupyter笔记本.默认环境是Py3.Py2有一个单独的环境.在笔记本文件中,我希望它尝试conda install foo.我现在正在使用subcommand这个,因为我找不到类似的程序性conda pip.main(['install','foo']).
问题是foo如果笔记本使用Py2内核运行,命令需要知道要安装在那里的Py2环境的名称.如果没有该信息,它将安装在默认的Py3环境中.我希望代码能够确定它所处的环境以及它自己的正确名称.
到目前为止,我得到的最佳解决方案是:
import sys
def get_env():
sp = sys.path[1].split("/")
if "envs" in sp:
return sp[sp.index("envs") + 1]
else:
return ""
Run Code Online (Sandbox Code Playgroud)
是否有更直接/适当的方法来实现这一目标?
我正在分发一个内部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中运行.
我相信那里有更好的想法,这就是我在这里的原因.
谢谢.