如何获取“ conda env list”以隐藏环境而不将其删除?

时间:2020-10-29 11:20:22

标签: python conda

我在尚未激活的文件夹中有一个虚拟环境。运行conda env list不会列出此环境。

但是,当我第一次使用Conda激活环境后,现在每次我运行conda env list时都会包含该环境。

是否有一种方法可以忽略 conda env list中的环境而不将其删除(因为这会删除整个文件夹)? 我想保留该文件夹而不删除它,也不希望Conda每次都列出它。

1 个答案:

答案 0 :(得分:2)

AFAIK,无法通过配置或其他现成的选项来指定conda env list命令忽略的特定环境。但是,如果我们仔细研究Conda如何生成此列表,则至少可以实现一种解决方法。

Conda用户环境跟踪

Conda通过两种方式跟踪环境:

    将自动发现位于任何envs_dirs目录中的
  1. 环境。您可以检查conda config --show envs_dirs以查看其中包含的目录。在不更改conda env list工作方式内部的情况下,conda-env中的此类环境将不可忽略(即,您必须派生conda代码并添加新功能)。

  2. 用户每次激活环境时,都会将其添加到用户特定的跟踪文件中,即

    ~/.conda/environments.txt
    

    其中~是用户主目录。清除要隐藏的环境文件应至少从conda env list输出中删除环境,直到再次激活为止。

自动解决方法示例

如果您希望进行更自动化的清除,则可以在外壳初始化文件(例如.bash_profile)中加入一行,以使用诸如sed和regex这样的东西从该文件中删除条目。匹配您希望忽略的环境。

作为一个具体的例子,我经常以Snakemake用户的身份遇到此问题。 Snakemake自动生成Conda环境,并使用它们在可重现(-ish)上下文中运行代码。这些环境都在.snakemake/目录下生成,并最终开始主导我的conda env list输出。这绝对是一件麻烦事,因为我从不打算手动激活任何这些环境,而且它们都由哈希命名,因此实际上不可能用前缀识别它们的内容。

要自动清除这些内容,可以将以下内容添加到.bashrc.bash_profile中:

sed -i '/\.snakemake/d' ~/.conda/environments.txt

这仍然会导致暂时显示这些自动生成的环境,但是每次启动新的Shell时,它们都会被清除。希望这些短暂的情况不会造成很大的麻烦,否则我认为对此的更具创造性的解决方案也是可行的,例如,每当文件更改时触发清除操作。