如何让“conda env list”隐藏环境而不删除它?
How to get `conda env list` to hide an environment without removing it?
我在一个尚未激活的文件夹中有一个虚拟环境。 运行 conda env list
不会列出此环境。
但是,在我第一次使用Conda激活环境后,现在我每次运行 conda env list
都会包含这个环境。
有没有办法忽略 conda env list
中的环境而不删除它(因为这会删除整个文件夹)?
我想保留该文件夹而不删除它并且 Conda 不会每次都列出它。
AFAIK,无法通过配置或其他 out-of-the-box 选项来指定要被 conda env list
命令忽略的特定环境。但是,如果我们深入了解 Conda 如何生成此列表,我们至少可以实施一个解决方法。
Conda 用户环境跟踪
Conda 以两种方式跟踪环境:
自动发现位于任何 envs_dirs
目录中的环境。您可以检查 conda config --show envs_dirs
以查看包含哪些目录。如果不改变 conda-env
工作原理的内部结构(即,您必须分叉 conda
代码并添加新功能),这样的环境在 conda env list
中是不可忽视的。
任何时候用户激活一个环境,它都会被添加到一个 user-specific 跟踪文件中,即
~/.conda/environments.txt
其中 ~
是用户主目录。清除您希望隐藏的环境文件应该从 conda env list
输出中删除环境,至少直到它再次被激活。
自动解决方法示例
如果您想要更自动化的清除,您可以在 shell 初始化文件(例如 .bash_profile
)中包含一行,以使用类似 [=21] 的方式从该文件中删除条目=] 和一个正则表达式来匹配您希望忽略的环境。
作为一个具体的例子,我作为 Snakemake 用户经常遇到这个问题。 Snakemake 自动生成 Conda 环境,并将它们用于 运行 可重现(-ish)上下文中的代码。这些环境都在 .snakemake/
目录下生成,并最终开始支配我的 conda env list
输出。这绝对是个麻烦,因为我从未打算手动激活任何这些环境,而且它们都是用哈希命名的,所以几乎不可能通过前缀识别它们的内容。
要自动清除这些,我可以将以下内容添加到我的 .bashrc
或 .bash_profile
:
sed -i '/\.snakemake/d' ~/.conda/environments.txt
这仍然会导致暂时显示这些 auto-generated 环境,但每次启动新的 shell 时它们都会被清除。希望这种暂时性的情况不会造成大麻烦,否则我想对此更有创意的解决方案也是可行的,例如,每当文件被更改时触发清除操作。
我在一个尚未激活的文件夹中有一个虚拟环境。 运行 conda env list
不会列出此环境。
但是,在我第一次使用Conda激活环境后,现在我每次运行 conda env list
都会包含这个环境。
有没有办法忽略 conda env list
中的环境而不删除它(因为这会删除整个文件夹)?
我想保留该文件夹而不删除它并且 Conda 不会每次都列出它。
AFAIK,无法通过配置或其他 out-of-the-box 选项来指定要被 conda env list
命令忽略的特定环境。但是,如果我们深入了解 Conda 如何生成此列表,我们至少可以实施一个解决方法。
Conda 用户环境跟踪
Conda 以两种方式跟踪环境:
自动发现位于任何
envs_dirs
目录中的环境。您可以检查conda config --show envs_dirs
以查看包含哪些目录。如果不改变conda-env
工作原理的内部结构(即,您必须分叉conda
代码并添加新功能),这样的环境在conda env list
中是不可忽视的。任何时候用户激活一个环境,它都会被添加到一个 user-specific 跟踪文件中,即
~/.conda/environments.txt
其中
~
是用户主目录。清除您希望隐藏的环境文件应该从conda env list
输出中删除环境,至少直到它再次被激活。
自动解决方法示例
如果您想要更自动化的清除,您可以在 shell 初始化文件(例如 .bash_profile
)中包含一行,以使用类似 [=21] 的方式从该文件中删除条目=] 和一个正则表达式来匹配您希望忽略的环境。
作为一个具体的例子,我作为 Snakemake 用户经常遇到这个问题。 Snakemake 自动生成 Conda 环境,并将它们用于 运行 可重现(-ish)上下文中的代码。这些环境都在 .snakemake/
目录下生成,并最终开始支配我的 conda env list
输出。这绝对是个麻烦,因为我从未打算手动激活任何这些环境,而且它们都是用哈希命名的,所以几乎不可能通过前缀识别它们的内容。
要自动清除这些,我可以将以下内容添加到我的 .bashrc
或 .bash_profile
:
sed -i '/\.snakemake/d' ~/.conda/environments.txt
这仍然会导致暂时显示这些 auto-generated 环境,但每次启动新的 shell 时它们都会被清除。希望这种暂时性的情况不会造成大麻烦,否则我想对此更有创意的解决方案也是可行的,例如,每当文件被更改时触发清除操作。