Using Environment Modules♯
Environment Modules provide an easy way to tailor a user's environment to use various software.[1] In contrast to login scripts and shell scripts, modulefiles allow for easy unsetting of modifications. Modulefiles are also shell-independent, obviating the need for separate environment-changing scripts for each shell.
Basic Usage♯
View available modulefiles♯
[juser@picotte001]$ module avail
View loaded modulefiles♯
[juser@picotte001]$ module list
Currently Loaded Modulefiles:
1) shared 2) DefaultModules 3) gcc/9.2.0 4) slurm/picotte/21.08.8
Load a modulefile♯
To use a particular software package, load its modulefile:
[juser@picotte001]$ module load fftw3/intel/2020/3.3.9
or
[juser@picotte001]$ module load fftw3/intel/2020
or
[juser@picotte001]$ module add fftw3/intel/2020
If the version string is not specified, the latest one will be loaded.
Then, view the loaded modules:
[juser@picotte001]$ module list
Currently Loaded Modulefiles:
1) shared 4) slurm/picotte/21.08.8
2) DefaultModules 5) fftw3/intel/2020/3.3.9
3) gcc/9.2.0
Unload a modulefile♯
[juser@picotte001]$ module unload fftw3/intel/2020
or
[juser@picotte001]$ module rm fftw3/intel/2020
Show what modifications a modulefile will make♯
[juser@picotte001]$ module display fftw3/intel/2020
-----------------------------------------------------------------------------------------------------
/ifs/opt/modulefiles/fftw3/intel/2020/3.3.10.lua:
-----------------------------------------------------------------------------------------------------
conflict("fftw")
conflict("fftw3")
try_load("intel/composerxe/2020u4")
whatis("Adds FFTW3 3.3.10 (Intel) to your environment ")
help([[ Adds FFTW3 (Intel) to your environment
]])
setenv("FFTW3DIR","/ifs/opt/fftw3/intel/2020/3.3.10")
prepend_path("PATH","/ifs/opt/fftw3/intel/2020/3.3.10/bin")
prepend_path("LD_LIBRARY_PATH","/ifs/opt/fftw3/intel/2020/3.3.10/lib")
prepend_path("LD_RUN_PATH","/ifs/opt/fftw3/intel/2020/3.3.10/lib")
prepend_path("MANPATH","/ifs/opt/fftw3/intel/2020/3.3.10/share/man")
prepend_path("INFOPATH","/ifs/opt/fftw3/intel/2020/3.3.10/share/info")
prepend_path("PKG_CONFIG_PATH","/ifs/opt/fftw3/intel/2020/3.3.10/lib/pkgconfig")
Switch one module for another♯
NB Intel Composer XE is Intel's compiler, gcc is the GNU compiler.
[juser@picotte001]$ module list
Currently Loaded Modules:
1) shared 3) gcc/9.2.0 5) default-environment
2) DefaultModules 4) slurm/picotte/21.08.8
[juser@picotte001]$ module switch gcc intel/composerxe
[juser@picotte001]$ module list
Currently Loaded Modules:
1) shared 3) slurm/picotte/21.08.8 5) intel/composerxe/2020u4
2) DefaultModules 4) default-environment
Online help♯
[juser@picotte001]$ module help
Creating Your Own Module Files♯
Instructions here are for the older Tcl-based modules on Proteus. (Tcl, pronounced "tickle" is a scripting language.[2]) Module files on Picotte use the newer Lua-based Lmod,[3] which also accepts Tcl-based module files. Lua is another scripting language.[4]
Creating your own module files[5] will be useful for getting your group members to all use the same version of software. As outlined above, module files are a much better solution than modifying login scripts as any changes to environment variables, etc, need only be made to the module file rather than each user's login script.
Add a New modulefiles Location♯
We suggest creating a directory within your group directory:
/ifs/groups/myresearchGrp/opt/modulefiles
Then, make sure each user has the following line in their login script
(~/.bashrc
) to add your group's modulefiles directory to the module
search path:
module use --append /ifs/groups/myresearchGrp/opt/modulefiles
All modulefiles that your group creates should be put in that directory.
If you would like your modulefiles to take precendence over all
system-installed ones, use the --prepend
option, instead.
This should be done within job scripts, as well.
Module File Naming Convention♯
To avoid confusion over which module is to be loaded by the "module load" command, we suggest you name your modulefiles tagged with your group name. For example, if you have Python 3.3 installed, you would create the modulefile
/ifs/groups/myresearchGrp/opt/modulefiles/myresearchGrp-python33
In Lua, modulefile names must end with ".lua
". Example:
-- -*- lua -*-
-- myresearchGrp-python39 modulefile
-- /ifs/groups/myresearchGrp/opt/modulefiles/myresearchGrp-python39.lua
local version = "3.9.1"
local prefix = "/ifs/groups/myresearchGrp/opt/python/" .. version
whatis("Adds Python " .. version .. " to your environment")
help([[ Adds Python to your environment
]])
conflict("python")
conflict("python3")
conflict("python37")
prereq("gcc/9.2.0")
prepend_path("PATH", prefix .. "/bin")
prepend_path("LD_LIBRARY_PATH", prefix .. "/lib")
prepend_path("MANPATH", prefix .. "/share/man")
References♯
[1] Environment Modules Project website
[3] Lmod: A New Environment Module System
[5] modulefile(4) man page (also available with the "man modulefile" command on any login node)