Conda 配置显示比配置更多的项目

Conda config shows extra item than configured

conda config --show-sources表示只有一个配置文件,即/home/gqqnbig/.condarc。此文件将 envs_dirs 设置为 2 个位置。

$ conda config --show-sources --debug
DEBUG conda.gateways.logging:set_verbosity(231): verbosity set to 2
==> /home/gqqnbig/.condarc <==
envs_dirs:
  - ~/shared/.conda/envs
  - /opt/anaconda3/envs
pkgs_dirs:
  - /opt/anaconda3/pkgs
  - ~/shared/.conda/pkgs

==> cmd_line <==
debug: True

然而,conda config --show 表示 envs_dirs 的计算值有 3 个位置。

$ conda config --show envs_dirs --debug
DEBUG conda.gateways.logging:set_verbosity(231): verbosity set to 2
DEBUG conda.base.context:root_writable(498): [Errno 13] Permission denied: '/opt/anaconda3/conda-meta/history'
envs_dirs:
  - /home/gqqnbig/shared/.conda/envs
  - /opt/anaconda3/envs
  - /home/gqqnbig/.conda/envs

如何填充第三个位置?如何防止 conda 使用 /home/gqqnbig/.conda/envs?

Conda 默认环境目录

$CONDA_ROOT_PREFIX/envs~/.conda/envs 目录都是 baked into the Conda code 并且将始终附加.condarc(您的第一个命令显示的内容)生成最终计算的 context.envs_dirs(您的第二个命令显示的内容)。只有当所有更高的先例位置都不可写时,Conda 才会使用它。

我不知道这部分代码的历史,但我怀疑这个默认文件夹主要是作为 Conda 实例(因此 $CONDA_ROOT_PREFIX/envs)所在的共享系统上的用户的后备在不可写的位置。即baking-in这两个目录,尽量保证单用户和共享用户安装场景下至少存在一个可写环境文件夹。

强制只读

我不太确定,但看起来 Conda 不依赖此文件夹用于任何其他目的。所以,如果真的想确保 Conda 从不使用它,您可以简单地将目录设为只读:

chmod -w ~/.conda/envs

为了安全起见,您可以尝试设置它,然后测试创建一个出现冗长的环境以检查是否存在问题。