【发布时间】:2016-08-01 01:54:45
【问题描述】:
我正在寻找一种从正在运行的代码或交互式 python 实例中找出我所在的 conda 环境名称的好方法。
用例是我正在运行 Jupyter 笔记本,同时使用来自 miniconda 安装的 Python 2 和 Python 3 内核。默认环境是 Py3。 Py2 有一个单独的环境。在笔记本文件中,我希望它尝试conda install 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 环境中,那么它将安装到该环境中。 -
我刚刚尝试了以下实验。在从我的默认 anaconda 环境启动的 Jupyter 笔记本中(但同时提供 Py2 和 Py3 ipython 内核),我在一个单元格中运行
!conda env list,在另一个单元格中运行import subprocess; print(subprocess.check_output(['conda','env', 'list']).decode())。无论我在 Py2 还是 Py3 中运行笔记本,两者都显示默认环境处于活动状态,因此可能是针对操作系统发出的命令在启动 jupiter 服务器使用的任何环境中运行。 -
我需要一些更简单的东西,如何找出你从 shell 运行的 conda env? (旁注你可以从 python 调用该命令)
-
回答我自己的评论
conda env list和*指向当前打开的环境。我这样做的原因是尽管名称出现在终端名称提示中,但当提示与我正在使用的环境不匹配时(例如使用 vscode)我遇到了问题。 -
如果您想要绝对路径,请执行
$ echo $CONDA_PREFIX参见输出:/home/miranda9/miniconda3/envs/metalearning
标签: python anaconda jupyter conda env