我在尚未激活的文件夹中有一个虚拟环境。运行conda env list
不会列出此环境。
但是,当我第一次使用Conda激活环境后,现在每次我运行conda env list
时都会包含该环境。
是否有一种方法可以忽略 conda env list
中的环境而不将其删除(因为这会删除整个文件夹)?
我想保留该文件夹而不删除它,也不希望Conda每次都列出它。
答案 0 :(得分:2)
AFAIK,无法通过配置或其他现成的选项来指定conda env list
命令忽略的特定环境。但是,如果我们仔细研究Conda如何生成此列表,则至少可以实现一种解决方法。
Conda通过两种方式跟踪环境:
envs_dirs
目录中的环境。您可以检查conda config --show envs_dirs
以查看其中包含的目录。在不更改conda env list
工作方式内部的情况下,conda-env
中的此类环境将不可忽略(即,您必须派生conda
代码并添加新功能)。
用户每次激活环境时,都会将其添加到用户特定的跟踪文件中,即
~/.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时,它们都会被清除。希望这些短暂的情况不会造成很大的麻烦,否则我认为对此的更具创造性的解决方案也是可行的,例如,每当文件更改时触发清除操作。