我正在尝试更改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源配置值从四个源,从最低到最高优先级列出:
- Python代码中的默认值
.condarc
配置文件(system<用户& lt;环境& lt;工作目录)- 环境变量(
CONDA_*
变量) < - 命令行规范/gh>
问题:环境变量优先
我们可以观察在OP的情况下,--show-sources
的结果是如何发挥作用的。具体来说,有三个地方定义了envs_dirs
:
/util/opt/anaconda/4.9.2/.condarc
系统级配置文件/home/helikarlab/joshl/.condarc
用户级配置文件- 环境变量
CONDA_ENVS_PATH
1一口>
由于环境变量具有优先级并将首选目录定义为/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_DIRS
和CONDA_ENVS_PATH
是可互换的,但是一次只能定义一个。前者是当前的用法,所以我相信后者很可能支持向后兼容。