- 前言
在linux下当对同一个编译器、运行库等有多版本的时候,如果每次编译都要去写上绝对路径就会很麻烦,使用module-environment
来进行管理这些环境变量是比较方便的。
注:本文针对deepin介绍,如果是centos请参考:传送门 - 安装
我是直接使用linux自带的官方软件源下载的
sudo apt-get install environment-modules
centos 安装
yum install -y environment-modules
- 介绍
安装完成后,会默认在/usr/share/Module
目录下产生一系列文件夹,其中init
中放了在各种系统下初始化这个程序的脚本,我的终端是bash,所以使用如下命令初始化。
source /usr/share/Module/init/bash
我把它加在.bashrc
下了。
注:得用绝对路径source,如果只在那个文件夹下使用命令source bash
会提示
bash:是一个二进制文件
暂时不知道为什么。 - modulefile的书写
1.搜索路径
顺便说下module-environment的使用方法。
使用module load xxx
命令后,系统就会在特定路径下去寻找名字为xxx的文件,然后按照该文件里面的内容来修改环境变量。
这个特定的路径默认是在/usr/share/modules/modulefile
和一些其他的地方。如果想修改或者说添加一些别的路径,可以通过在初始化文件中添加命令修改MODULEPATH
来达到目的。
在/usr/share/module/init/bash
中最后一行添加
export MODULEPATH=/YOUR/PATH/:$MODULEPATH
注:如果在.bashrc 文件中直接修改MODULEPATH
是没有用的,不知道为什么。可能是我中间有什么地方错了。
2.文件书写 - 在文件开头一定要写上
#%Module1.0
这个是识别这个文件为modulefile的,没有他这个文件不会被识别 - 有几个命令,其实命令有很多,我只说一些暂时能用的上的
prepend 要修改的环境变量 路径
这个命令会把路径添加到对应的环境变量中
setenv 环境变量名 值
修改环境变量值。
conflict modulefile
如果这个modulefile 已经被加载,那么当前的modulefile将不能被加载。
最后会放上一个例子 - 使用
一些命令。
module avail
显示可以使用的模块
module load
加载模块
module unload
卸载模块
module list
显示已经加载的模块 - 官网地址
https://modules.readthedocs.io/en/latest/module.html - 遇到的问题
a. 使用sudo apt-get install environment-modules
安装完成后初始化源文件失败,显示没有那个函数或者文件。
这是软件源过久,老软件的bug,去官网地址手动下载安装。
b. 手动安装的时候configure找不到tcl version
暂时不知道怎么回事,官方回复说是os的问题,给了两种选择:
(1)手动指定tcl的version :./configure --tcl-version=你的版本号
(2)禁用tcl,或者说是选择不需要tcl 的下载方式,说需要tcl的下载其实是下载兼容模式版本
./configure -disable-compat-version
最后放上一个例子,抄老师的,哈哈。
#%Module1.0
module-whatis Provides the Intel fortran and c compiler mkl 2015 environment for x86_64 systems
setenv INTEL_LICENSE_FILE /opt/intel/licenses/all_intel_products.lic
#conflict intel pathscale pgi gcc open64
setenv CC icc
setenv CXX icpc
setenv FC ifort
setenv F77 ifort
setenv F90 ifort
setenv F95 ifort
setenv CFLAGS -O2
setenv FFLAGS -O2
setenv OFLAGS -O3
setenv GFLAGS -g -O1
setenv MKLROOT /opt/intel/mkl
prepend-path PATH /opt/intel/composer_xe_2015/bin
prepend-path MANPATH /opt/intel/composer_xe_2015/man/en_US
prepend-path LD_RUN_PATH /opt/intel/composer_xe_2015/lib/intel64:/opt/intel/composer_xe_2015/mkl/lib/intel64
prepend-path LD_LIBRARY_PATH /opt/intel/composer_xe_2015/lib/intel64:/opt/intel/composer_xe_2015/mkl/lib/intel64
prepend-path LIBRARY_PATH /opt/intel/composer_xe_2015/lib/intel64:/opt/intel/composer_xe_2015/mkl/lib/intel64
prepend-path C_INCLUDE_PATH /opt/software/ompi/gcc9.4.0/include #gcc编译器的头文件默认搜索路径
prepend-path CPLUS_INCLUDE_PATH /opt/software/ompi/gcc9.4.0/include #g++编译器的头文件默认搜索路径