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

问题描述 投票:0回答:4

当我这样做时

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 actions 中缓存所有环境依赖项。这必须在环境激活之前发生。如果我知道环境的位置,我可以缓存其中的所有文件。

anaconda conda miniconda anaconda3
4个回答
4
投票
conda info --envs | grep -Po 'myenv\K.*' | sed 's: ::g'

此 bash 命令将从 conda 检索所有环境,并找到从

myenv
开始的行,并将其交给
sed
命令,该命令又会删除空格

令人惊讶的是它对我有用


4
投票
$(conda info --base)/envs/myenv

2
投票

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
异常。


0
投票

这是一个老问题,但目前所有响应都依赖于设计为仅供人类读取的

conda
命令的输出格式。

您可以通过

--json
获取机器可解析的输出,然后使用
jq
以可靠的方式提取您需要的信息。

正如您通过运行

conda info --json
所看到的,机器可解析版本实际上并不包含环境名称...这是因为环境名称是由环境包含文件夹的名称定义,所以您可以做一些事情喜欢

$ conda info --json | jq -r '.envs[] | select(. | endswith("/${YOUR_ENV_NAME}") )'
  • -r
    输出原始字符串(不是 JSON)
  • .envs[]
    获取所有环境位置的列表
  • | select( ... )
    筛选出您想要的
  • 环境名称前有斜杠,以防止名称为另一个环境名称后缀的环境出现问题。
© www.soinside.com 2019 - 2024. All rights reserved.