计算化学公社

标题: [造轮子]写了一个简单的模块管理系统 [打印本页]

作者
Author:
万里云    时间: 2018-11-11 21:37
标题: [造轮子]写了一个简单的模块管理系统
源码放在https://gitee.com/yhli/misc/tree/master/pmod上了。

组里有一台服务器硬盘坏了。上周抽空修好它,重装系统后,觉得用export XXXX=xxx:$XXXX设置环境变量太麻烦。一旦手滑把PATH或者LD_LIBRARY_PATH拼错,就进不了系统了。于是就先写了这么个修改环境变量的函数
  1. function setenv ()
  2. {
  3.     case $1 in
  4.         mod)
  5.             export PATH=$2/bin:$PATH
  6.             export LIBRARY_PATH=$2/lib:$LIBRARY_PATH
  7.             export LD_LIBRARY_PATH=$2/lib:$LD_LIBRARY_PATH
  8.             export C_INCLUDE_PATH=$2/include:$C_INCLUDE_PATH
  9.             export CPLUS_INCLUDE_PATH=$2/include:$CPLUS_INCLUDE_PATH
  10.             ;;
  11.         path)
  12.             export PATH=$2:$PATH
  13.             ;;
  14.         lib)
  15.             export LIBRARY_PATH=$2:$LIBRARY_PATH
  16.             export LD_LIBRARY_PATH=$2:$LD_LIBRARY_PATH
  17.             ;;
  18.         inc)
  19.             export C_INCLUDE_PATH=$2:$C_INCLUDE_PATH
  20.             export CPLUS_INCLUDE_PATH=$2:$CPLUS_INCLUDE_PATH
  21.             ;;
  22.         py)
  23.             export PYTHONPATH=$2:$PYTHONPATH
  24.             ;;
  25.         *)
  26.             echo "Unrecognized environment variable $1"
  27.             ;;
  28.     esac
  29. }
复制代码
后来在师弟的不断修改下,这个函数功能越来越多,具有了模块管理系统的雏形。但用shell写复杂一点的东西很麻烦,想传个列表给函数要倒好几趟手。专业的模块管理系统比如lmod又需要学习,就自己用python写了一个简单的。

整个程序很简单,只有三个文件。核心思想是把模块配置信息存在字典中;bash接收命令行参数并转发给python脚本,再执行由python脚本返回的bash命令。目前支持输出模块信息、加载和卸载模块、自动加载依赖模块、执行附加命令等功能。安装不强求root权限,适合几个人用的单一节点,也可以单人使用。


配置信息是这样的:
  1. # Module configurations
  2. avail_mods = dict()
  3. prefix = "/home/yhli/soft"

  4. # for shared libraries
  5. add_mod("mkl-13.0.079", "mod", prefix+"/mkl-13.0.079")
  6. add_mod("mkl-13.0.079", "lib", prefix+"/mkl-13.0.079/lib/intel64")
  7. add_mod("fftw-3.3.4", "mod", prefix+"/fftw-3.3.4")
  8. add_mod("hdf5-1.8.17", "mod", prefix+"/hdf5-1.8.17")
  9. add_mod("libxc-4.2.3","mod", prefix+"/libxc-4.2.3")

  10. # for openmpi
  11. add_mod("openmpi-1.10.0", "mod", prefix+"/openmpi-1.10.0")

  12. # for DFT and GW software
  13. add_mod("qe-6.2", "path", prefix+"/qe-6.2/bin",
  14.         dep=["mkl-13.0.079", "openmpi-1.10.0", "hdf5-1.8.17"])

  15. add_mod("qe-5.4.0", "path", prefix+"/espresso-5.4.0/bin",
  16.         dep=["mkl-13.0.079", "openmpi-1.10.0"])

  17. add_mod("bgw-1.2.0", "path", prefix+"/bgw-1.2.0/bin",
  18.         dep=["mkl-13.0.079", "openmpi-1.10.0", "hdf5-1.8.17", "fftw-3.3.4"])

  19. add_mod("elk-4.0.15", "path", prefix+"/elk-4.0.15/bin",
  20.         dep=["mkl-13.0.079", "openmpi-1.10.0"])

  21. add_mod("wannier90-2.1.0", "path", prefix+"/wannier90-2.1.0",
  22.         dep=["mkl-13.0.079", "openmpi-1.10.0"])

  23. add_mod("vasp.5.4.1", "path", prefix+"/vasp.5.4.1/bin",
  24.         dep=["mkl-13.0.079", "openmpi-1.10.0"])

  25. add_mod("exciting.carbon", "path", prefix+"/exciting.carbon/bin",
  26.         dep=["mkl-13.0.079", "openmpi-1.10.0"])
复制代码
运行效果如图:
(, 下载次数 Times of downloads: 94)
(, 下载次数 Times of downloads: 71)
(, 下载次数 Times of downloads: 73)



作者
Author:
xaomidaxue    时间: 2018-11-12 08:26
你好,非常感谢,这个东西集群能使用么?谢谢!
作者
Author:
万里云    时间: 2018-11-12 09:58
xaomidaxue 发表于 2018-11-12 08:26
你好,非常感谢,这个东西集群能使用么?谢谢!

集群有专门的模块管理系统,比如Environment Modules和lmod。
http://modules.sourceforge.net/
https://www.tacc.utexas.edu/rese ... /tacc-projects/lmod
作者
Author:
laoman    时间: 2018-12-13 17:17
万里云 发表于 2018-11-12 09:58
集群有专门的模块管理系统,比如Environment Modules和lmod。
http://modules.sourceforge.net/
https: ...

Environment Module的配置比lmod的简单,它通过$MODULEPATH找软件的环境变量配置文件,在.bashrc里追加一个自定义的目录就可以方便的load和unload自己安装的软件了。比如:
export MODULEPATH=$MODULEPATH:/pfs/nobackup/home/j/jhli/soft/my_modules

至于环境变量配置文件,看几个超算上的软件例子也很容易写出来。





欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3