如何从名称中获取 conda env 的路径?

How to get path of conda env from its name?

当我执行 conda info --envs 时,我会得到所有环境及其位置的列表,如下所示:

# conda environments:
#
base                  *  /Users/mbp/miniconda3
myenv              /Users/mbp/miniconda3/envs/myenv

有没有办法从命令行获取 myenv 环境的位置?可能类似于 conda info --envs myenv 得到

/Users/mbp/miniconda3/envs/myenv

用例是什么?
我想在 GitHub 操作中缓存所有环境依赖项。这必须在激活环境之前发生。如果我知道环境的位置,我可以缓存其中的所有文件。

conda info --envs | grep -Po 'myenv\K.*' | sed 's: ::g'

此 bash 命令将从 conda 检索所有环境并找到从 myenv 开始的行并将其提供给 sed 命令,该命令依次删除空格

令人惊讶的是它对我有用

Conda 处理前缀解析 (locate_prefix_by_name) 的内部函数当前位于 conda.base.context,因此可以避免使用如下脚本列出所有环境:

conda-locate.py

#!/usr/bin/env conda run -n base python

import sys
from conda.base.context import locate_prefix_by_name

print(locate_prexif_by_name(sys.argv[1]), end='')

用法

# make executable
chmod +x conda-locate.py

./conda-locate.py jupyter
# /Users/user/miniforge/envs/jupyter

您可能想要添加一个 try..catch 来处理 conda.exceptions.EnvironmentNameNotFound 异常。