跳转至

Module使用

module 则是一款 LInux 下软件环境变量的管理工具,通过 module 实现软件环境变量的管理,快速加载和切换软件环境。平台上预安装了部分常见软件,通过 module 进行加载。

module 常见指令

下面是 module 的一些常见指令:

module help       # 显示帮助信息
module avail      # 显示平台上已经安装的软件环境
module load       # 加载指定的软件环境
module unload     # 取消加载指定的软件环境
module list       # 列出已经导入的软件环境
module purge      # 清除所有已经加载的软件环境
module switch [mod1] mod2 # 取消加载 mod1 的同时加载 mod2

module 使用例子

查看集群现有软件

module avail

查看集群可用 matlab 版本

module avail matlab

加载 matlab/R2017a

module load matlab/R2017a

清除当前通过 module 加载的环境

module purge

module 管理自己安装的软件环境

自己编译安装的软件也可以通过 module 来进行管理,步骤如下:

1. 创建目录用来存放自己的 modulefile

mkdir -p ${HOME}/software/modulefiles   # 创建目录用于放自己的 modulefile

将下面的内容添加到 ~/.bashrc 文件中

~/.bashrc
export MODULEPATH=${HOME}/software/modulefiles:$MODULEPATH

执行 source ~/.bashrc 或者退出重新登录即可

2. 编写 modulefile

打开刚刚创建好的,用于 modulefile 的目录

cd ${HOME}/software/modulefiles

在创建好的目录下编写 modulefile,假设在路径 ${HOME}/software/gcc/7.2.0 中安装了 7.2.0 版本的 GCC 编译器,则可以这么编写名为 gcc-7.2.0 的 modulefile;

gcc-7.2.0
#%Module1.0
##
##
module-whatis gcc@7.2.0"

set topdir "${HOME}/software/gcc/7.2.0"

prepend-path PATH "${topdir}/bin"
prepend-path LIBRARY_PATH "${topdir}/lib"
prepend-path LD_LIBRARY_PATH "${topdir}/lib"
prepend-path LIBRARY_PATH "${topdir}/lib64"
prepend-path LD_LIBRARY_PATH "${topdir}/lib64"
prepend-path CPATH "${topdir}/include"
prepend-path CMAKE_PREFIX_PATH "${topdir}"

setenv CC "${topdir}/bin/gcc"
setenv CXX "${topdir}/bin/g++"
setenv FC "${topdir}/bin/gfortran"
setenv F77 "${topdir}/bin/gfortran"
setenv F90 "${topdir}/bin/gfortran"

编写好后执行 module avail 就可查看到刚刚写好的 modulefile,并通过 module 加载使用自己的软件环境了。

编写 modulefile 语法

下为编写 modulefile 文件常见的语法;

set           # 设置 modulefile 内部环境变量
setenv        # 设置环境变量
prepend-path  # 效果类似于export PATH=xxx:$PATH
append-path   # 效果类似export PATH=$PATH:xxx

有些软件安装完后,通过 source xxx.sh 的方式导入环境变量,可以这么写 modulefile ,如 intel parallel studio

set scriptpath  "/lustre/software/intel/2018.1/compilers_and_libraries_2018.1.163/linux/bin"
switch -- [module-info shelltype] {
    sh {
        source-sh bash $scriptpath/compilervars.sh intel64
    }
    csh {
        source-sh tcsh $scriptpath/compilervars.csh intel64
    }
}

append-path         INTEL_LICENSE_FILE     "/lustre/software/intel_parallel_studio/licenses"