# 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 ```bash module list ``` 想要查看服务器中所有可用的 module ```bash module avail ``` 添加某些软件时需要指定版本,如果不写版本,则服务器会添加后面标注有(default)的项 ```bash module add gcc/4.8.5 ``` 如果要把某个模块从系统环境中删掉 ```bash module remove ``` 如果要删除全部的模块 ```bash module purge ``` 一个模块删除之后,你将无法直接使用与之相关的命令。对应软件的执行目录无法被直接访问,或者是还原成系统默认的版本。 有的时候,模块之间会有所冲突,你无法在同一时间同时加载两个模块。例如同一软件的不同版本,或者是接口相同的不同软件。当你载入其中一个后,再载入另一个就会出错。 在 anaconda/2存在的情况下,无法继续加入 anaconda/3,这是因为两个 module 之间有冲突。因此需要切换软件的版本,你可以使用 module remove 命令将一个版本的 module 从环境中移除, 不过 module 提供了更方便的命令: ```bash module swap anaconda/2 anaconda/3 ``` 当你登录系统时,系统会默认载入一些 module。如果这些 module 不是你需要的,或者你 需要载入更多的 module,那么请直接在个人 HOME 目录下的 .bash_profile 文件的 最后添加 ```bash module add ``` 每个 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 "" ``` 可以使用 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 /bin prepend-path LD_LIBRARY_PATH /lib64 prepend-path LIBRARY_PATH /lib64 prepend-path MANPATH /share/man ```