修改conda配置文件不能反映环境的变化



我正在尝试更改Conda环境的默认安装位置,因为我正在使用的系统(超级计算集群)有~20GB的用户主配额。在正常情况下,这可以很容易地通过编辑~/.condarc并添加一部分envs_dirs来完成,这在本问答中得到了很好的解释。

然而,我所处的计算环境(即超级计算机)似乎不允许我修改各种位置的优先级。在理想的情况下,我可以将/work/helikarlab/joshl/.conda/envs放在列表的顶部,这是一个高存储分区,因此如果需要,我可以安装其他环境。

我的~/.condarc配置如下:

env_prompt: ({name})
channels:
- conda-forge
- bioconda
- defaults
auto_activate_base: false
envs_dirs:
- /work/helikarlab/joshl/.conda/envs/

然而,我在conda config --show envs_dirs

中观察到以下条目
envs_dirs:
- /home/helikarlab/joshl/.conda/envs
- /util/opt/anaconda/deployed-conda-envs/packages/python/envs
- /util/opt/anaconda/deployed-conda-envs/packages/perl/envs
- /util/opt/anaconda/deployed-conda-envs/packages/git/envs
- /util/opt/anaconda/deployed-conda-envs/packages/nano/envs
- /work/helikarlab/joshl/.conda/envs
- /home/helikarlab/joshl/.conda/envs/base_env/envs

有人知道为什么我的尝试设置envs_dirs不工作吗?如何将/work/helikarlab/joshl/.conda/envs设置为最高优先级?


附加信息以下是conda config --show-sources

的结果
==> /util/opt/anaconda/4.9.2/.condarc <==
allow_softlinks: False
auto_update_conda: False
auto_activate_base: False
notify_outdated_conda: False
repodata_threads: 4
verify_threads: 4
execute_threads: 2
aggressive_update_packages: []
pkgs_dirs:
- ${WORK}/.conda/pkgs
- ${HOME}/.conda/pkgs
channel_priority: disabled
channels:
- hcc
- https://conda.anaconda.org/t/<TOKEN>/hcc
- conda-forge
- bioconda
- defaults
- file:///util/opt/conda_repo
==> /home/helikarlab/joshl/.condarc <==
auto_activate_base: False
env_prompt: ({name})
envs_dirs:
- /work/helikarlab/joshl/.conda/envs/
channel_priority: disabled
channels:
- conda-forge
- bioconda
- defaults
==> envvars <==
envs_path:
- /home/helikarlab/joshl/.conda/envs
- /util/opt/anaconda/deployed-conda-envs/packages/python/envs
- /util/opt/anaconda/deployed-conda-envs/packages/perl/envs
- /util/opt/anaconda/deployed-conda-envs/packages/git/envs
- /util/opt/anaconda/deployed-conda-envs/packages/nano/envs

背景:Conda的配置优先级

Power Users的Conda Configuration Engine"post, Conda源配置值从四个源,从最低到最高优先级列出:

  1. Python代码中的默认值
  2. .condarc配置文件(system<用户& lt;环境& lt;工作目录)
  3. 环境变量(CONDA_*变量)
  4. <
  5. 命令行规范/gh>

问题:环境变量优先

我们可以观察在OP的情况下,--show-sources的结果是如何发挥作用的。具体来说,有三个地方定义了envs_dirs:

  1. /util/opt/anaconda/4.9.2/.condarc
  2. 系统级配置文件
  3. /home/helikarlab/joshl/.condarc
  4. 用户级配置文件
  5. 环境变量CONDA_ENVS_PATH1

由于环境变量具有优先级并将首选目录定义为/home/helikarlab/joshl/.conda/envs,因此无论conda config.condarc文件设置为什么,它都将具有优先级。

工作区

下面所有的解决方法都涉及到对环境变量的操作。不清楚何时设置该变量(可能是通过系统级shell配置文件)。通过在用户级shell配置文件(例如,~/.bashrc,~/.bash_profile,~/.zshrc)中添加以下任何一种变通方法来操作变量应该是可靠的。

选项1:取消变量

可以用

完全删除变量
unset CONDA_ENVS_PATH

这将允许用户级.condarc具有优先级。

然而,这个变量似乎也为几个系统级共享环境提供了位置。目前还不清楚这些共享环境对正常功能有多重要。因此,完全删除变量可能会产生额外的后果。

选项2:替换value

方便的是,位置默认值和期望位置仅通过将/home替换为/work而不同。这可以在变量中直接修改:

export CONDA_ENVS_PATH=${CONDA_ENVS_PATH//home//work}

选项3:前置所需的默认

最通用的重写是在环境变量前加上所需的默认路径:

export CONDA_ENVS_PATH="/work/helikarlab/joshl/.conda/envs/:${CONDA_ENVS_PATH}"

这可能是最健壮的,因为它对继承的值没有任何假设。

<标题>额外注意

在默认位置具有小磁盘配额的用户还应该考虑移动包缓存(pkgs_dirs)以与环境目录协调。


<子>[1]:CONDA_ENVS_DIRSCONDA_ENVS_PATH是可互换的,但是一次只能定义一个。前者是当前的用法,所以我相信后者很可能支持向后兼容。

最新更新