计算化学公社
标题:
使用LMOD/module管理conda环境变量
[打印本页]
作者Author:
Stardust0831
时间:
5 hour ago
标题:
使用LMOD/module管理conda环境变量
最近拜读
@Uus/pMeC6H4-/キ
老师的《
私用小电脑WSL2装RockyLinux10虚拟机,及LMod管理OpenMPI-4.1.8, ORCA-6.1.1等的笔记
》
里面提及了conda相关的环境变量管理,但似乎反激活机制仍有欠缺,在实际使用时,即使取消了conda的激活,也依然可能会有一部分conda的环境残留。
这可能会导致预期外的软件版本、报错的出现,一个例子就是可能会因为LD_LIBRARY_PATH的污染导致OpenSSL version mismatch而使ssh相关的功能失效。
这里共享出目前的用于生产环境中对conda环境管理的module文件,已经尽力避免了环境变量残留,如您发现有缺陷,还请多指教。
这个是lmod用的lua文件:
-- -*- lua -*-
local conda_root = "/opt/devtools/anaconda3"
local env_script = "/opt/envs/anaconda3.env"
source_sh("bash", env_script)
prepend_path("PATH", conda_root .. "/bin")
prepend_path("PATH", conda_root .. "/condabin")
if (mode() == "remove") then
local cleanup_list = {
"CONDA_EXE", "CONDA_PYTHON_EXE", "CONDA_SHLVL", "CONDA_PREFIX",
"CONDA_DEFAULT_ENV", "CONDA_PROMPT_MODIFIER", "CONDA_PREFIX_1",
"_CE_M", "_CE_CONDA"
}
for _, var in ipairs(cleanup_list) do
unsetenv(var)
end
LmodMessage("Cleaning up Conda environment...")
execute{cmd="export PATH=$(echo $PATH | tr ':' '\\n' | grep -v -E 'anaconda3/bin|anaconda3/condabin|/.conda/envs/' | paste -sd ':' -)", modeA={"remove"}}
execute{cmd="while [ ${CONDA_SHLVL:-0} -gt 0 ]; do conda deactivate; done; unset -f conda __conda_activate __conda_reactivate; hash -r", modeA={"remove"}}
end
复制代码
这个是给module用的tcl文件:
#%Module1.0
conflict conda
set conda_root "/opt/devtools/anaconda3"
set env_script "/opt/envs/anaconda3.env"
if { [module-info mode load] } {
if { [file exists $env_script] } {
source-sh bash $env_script
}
prepend-path PATH "$conda_root/bin"
prepend-path PATH "$conda_root/condabin"
}
if { [module-info mode remove] } {
puts stdout "while \[ \${CONDA_SHLVL:-0} -gt 0 \]; do conda deactivate; done;"
set cleanup_list {
CONDA_EXE CONDA_PYTHON_EXE CONDA_SHLVL CONDA_PREFIX
CONDA_DEFAULT_ENV CONDA_PROMPT_MODIFIER CONDA_PREFIX_1
_CE_M _CE_CONDA __MODULES_SHARE_PATH
}
foreach var $cleanup_list {
unsetenv $var
puts stdout "unset $var;"
}
puts stdout "unset -f conda __conda_activate __conda_reactivate __conda_hashr __add_sys_prefix_to_path __conda_exe __conda_s_rc;"
puts stdout "export PATH=\$(echo \$PATH | tr ':' '\\n' | grep -v -E '/.conda/envs/|/anaconda3/bin|/anaconda3/condabin' | paste -sd ':' -);"
puts stdout "unalias conda 2>/dev/null; hash -r;"
}
复制代码
欢迎光临 计算化学公社 (http://bbs.keinsci.com/)
Powered by Discuz! X3.3