Environment Module

https://blog.csdn.net/jslove1997/article/details/80338370

https://blog.csdn.net/rhel_admin/article/details/45368177

https://blog.csdn.net/taiyangdao/article/details/52535864

http://bicmr.pku.edu.cn/~wenzw/pages/env.html

https://enigmahuang.github.io/2017/02/22/Environment-Modules-Usage/


基本命令

查看当前所载入的所有 module

module list

想要查看服务器中所有可用的 module

module avail

添加某些软件时需要指定版本,如果不写版本,则服务器会添加后面标注有(default)的项

module add gcc/4.8.5

如果要把某个模块从系统环境中删掉

module remove <module name>

如果要删除全部的模块

module purge

一个模块删除之后,你将无法直接使用与之相关的命令。对应软件的执行目录无法被直接访问,或者是还原成系统默认的版本。 有的时候,模块之间会有所冲突,你无法在同一时间同时加载两个模块。例如同一软件的不同版本,或者是接口相同的不同软件。当你载入其中一个后,再载入另一个就会出错。 在 anaconda/2存在的情况下,无法继续加入 anaconda/3,这是因为两个 module 之间有冲突。因此需要切换软件的版本,你可以使用 module remove 命令将一个版本的 module 从环境中移除, 不过 module 提供了更方便的命令:

module swap anaconda/2 anaconda/3

当你登录系统时,系统会默认载入一些 module。如果这些 module 不是你需要的,或者你 需要载入更多的 module,那么请直接在个人 HOME 目录下的 .bash_profile 文件的 最后添加

module add <module name>

每个 module 的添加单独占一行。这样每次你登录系统之后系统就会自动加载你指定的 module。


版本管理

为每一个库创建一个 module file。一般来说这不比写环境变量脚本麻烦多少,主要就是标明这个库的冲突标识符(两个冲突标识符相同的 module 不能同时加载)和列出库的 PATH LD_LIBRARY_PATH 和 MANPATH 路径。

将写好的 module files 放到 module 可以识别的目录中以供查询。同一个库不同版本的 module files 应放在同一个文件夹中,以版本号作为文件名。比如,我有 CUDA 6.0 和 CUDA 7.0,它们的 module files 我会放在 /etc/modulefiles/cuda 这个目录下面。如果需要指定默认加载的版本,则需要在文件夹里多创建一个 .version 文件:

#%Module1.0
set ModulesVersion  "<DEFAULT_VERSION_STRING>"

可以使用 module avail 命令让系统列出可用的 module,选择需要的使用库,用 module load 命令进行加载。如果一个库有多个可选版本,需要指定加载哪一个,或者让系统加载默认选项。 以上述的 CUDA 6.0 7.0 为例,我需要加载 CUDA 7.0 的时候,则应该使用 module load cuda/7.0 的命令来加载。

要查看现在已经加载的 mofule files,可以用命令 module list 。使用完以后用 module unload 来取消加载,比如module unload cuda/7.0 。

module file 示例

GCC

#%Module 1.0
# 这一行一般 module file 都有
# 冲突标识符gcc
conflict        gcc
# 所需路径
prepend-path    PATH            <GCC_INSTALL_PATH>/bin
prepend-path    LD_LIBRARY_PATH <GCC_INSTALL_PATH>/lib64
prepend-path    LIBRARY_PATH    <GCC_INSTALL_PATH>/lib64
prepend-path    MANPATH         <GCC_INSTALL_PATH>/share/man