我正在寻找一种好的方法,从正在运行的代码或交互式python实例中确定conda环境的名称。
使用案例是我从miniconda安装中运行Python 2和Python 3内核的Jupyter笔记本。默认环境为Py3。有一个单独的Py2环境。在笔记本文件中,我希望它尝试通过conda install foo
来安装foo。我目前正在使用subcommand
来做这件事,因为我找不到与pip.main(['install','foo'])
相当的编程化conda等效物。
问题是,在笔记本使用Py2内核运行时,命令需要知道Py2环境的名称才能在那里安装foo
。如果没有这个信息,它将安装在默认的Py3环境中。我希望代码自己能够找出它所在的环境和正确的名称。
到目前为止,我得到的最佳解决方案是:
import sys
def get_env():
sp = sys.path[1].split("/")
if "envs" in sp:
return sp[sp.index("envs") + 1]
else:
return ""
有更直接/合适的方法来完成这个吗?
conda install x
会安装到当前环境中:所以如果笔记本在Python 2环境中,则会安装到该环境中。 - user5920214!conda env list
,在另一个单元格中运行了import subprocess; print(subprocess.check_output(['conda','env', 'list']).decode())
。无论我在Py2还是Py3中运行笔记本,两者都显示默认环境处于活动状态,因此发出对操作系统的命令可能会在jupiter服务器使用的任何环境中执行。 - Alnilamconda env list
,*
指向当前打开的环境。我这样做的原因是尽管名称出现在终端名称提示符上,但当提示符与我正在使用的环境不匹配时(例如使用 vscode),我会遇到问题。 - Charlie Parker$ echo $CONDA_PREFIX
并查看输出:/home/miranda9/miniconda3/envs/metalearning
- Charlie Parkerimport os; print(os.environ["CONDA_PREFIX"])
,输出为/Users/miranda9/.conda/envs/synthesis
。 - Charlie Parker