计算化学公社

 找回密码 Forget password
 注册 Register
Views: 33|回复 Reply: 0
打印 Print 上一主题 Last thread 下一主题 Next thread

[Linux] 使用LMOD/module管理conda环境变量

[复制链接 Copy URL]

425

帖子

3

威望

2683

eV
积分
3168

Level 5 (御坂)

最近拜读@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文件:
  1. -- -*- lua -*-
  2. local conda_root = "/opt/devtools/anaconda3"
  3. local env_script = "/opt/envs/anaconda3.env"

  4. source_sh("bash", env_script)
  5. prepend_path("PATH", conda_root .. "/bin")
  6. prepend_path("PATH", conda_root .. "/condabin")

  7. if (mode() == "remove") then
  8.     local cleanup_list = {
  9.         "CONDA_EXE", "CONDA_PYTHON_EXE", "CONDA_SHLVL", "CONDA_PREFIX",
  10.         "CONDA_DEFAULT_ENV", "CONDA_PROMPT_MODIFIER", "CONDA_PREFIX_1",
  11.         "_CE_M", "_CE_CONDA"
  12.     }
  13.     for _, var in ipairs(cleanup_list) do
  14.         unsetenv(var)
  15.     end

  16.     LmodMessage("Cleaning up Conda environment...")
  17.     execute{cmd="export PATH=$(echo $PATH | tr ':' '\\n' | grep -v -E 'anaconda3/bin|anaconda3/condabin|/.conda/envs/' | paste -sd ':' -)", modeA={"remove"}}
  18.     execute{cmd="while [ ${CONDA_SHLVL:-0} -gt 0 ]; do conda deactivate; done; unset -f conda __conda_activate __conda_reactivate; hash -r", modeA={"remove"}}
  19. end
复制代码
这个是给module用的tcl文件:
  1. #%Module1.0
  2. conflict conda
  3. set conda_root "/opt/devtools/anaconda3"
  4. set env_script "/opt/envs/anaconda3.env"

  5. if { [module-info mode load] } {
  6.     if { [file exists $env_script] } {
  7.         source-sh bash $env_script
  8.     }
  9.     prepend-path PATH "$conda_root/bin"
  10.     prepend-path PATH "$conda_root/condabin"
  11. }

  12. if { [module-info mode remove] } {
  13.     puts stdout "while \[ \${CONDA_SHLVL:-0} -gt 0 \]; do conda deactivate; done;"
  14.     set cleanup_list {
  15.         CONDA_EXE CONDA_PYTHON_EXE CONDA_SHLVL CONDA_PREFIX
  16.         CONDA_DEFAULT_ENV CONDA_PROMPT_MODIFIER CONDA_PREFIX_1
  17.         _CE_M _CE_CONDA __MODULES_SHARE_PATH
  18.     }
  19.     foreach var $cleanup_list {
  20.         unsetenv $var
  21.         puts stdout "unset $var;"
  22.     }
  23.     puts stdout "unset -f conda __conda_activate __conda_reactivate __conda_hashr __add_sys_prefix_to_path __conda_exe __conda_s_rc;"
  24.     puts stdout "export PATH=\$(echo \$PATH | tr ':' '\\n' | grep -v -E '/.conda/envs/|/anaconda3/bin|/anaconda3/condabin' | paste -sd ':' -);"
  25.     puts stdout "unalias conda 2>/dev/null; hash -r;"
  26. }
复制代码


评分 Rate

参与人数
Participants 2
eV +8 收起 理由
Reason
Uus/pMeC6H4-/キ + 3 检测CONDA_SHLVL自动退环境很好
wal + 5

查看全部评分 View all ratings

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-3-5 18:18 , Processed in 0.154484 second(s), 21 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list