请选择 进入手机版 | 继续访问电脑版

计算化学公社

 找回密码
 现在注册!
查看: 413|回复: 3

[Python] [造轮子]写了一个简单的模块管理系统

[复制链接]

214

帖子

4

威望

1767

eV
积分
2061

Level 5 (御坂)

发表于 2018-11-11 21:37:32 | 显示全部楼层 |阅读模式
源码放在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"])
复制代码
运行效果如图:
1.PNG
2.PNG
3.PNG


评分

参与人数 8eV +42 收起 理由
Jack + 5 赞!
Novice + 2 虽然不懂,还是点赞
xaomidaxue + 5
sobereva + 10
wangyj + 5 谢谢分享
zyzhang + 5 谢谢分享
让你变成回忆 + 5 好物!
Shine剪水 + 5 赞!

查看全部评分

81

帖子

0

威望

247

eV
积分
328

Level 3 能力者

发表于 2018-11-12 08:26:51 | 显示全部楼层
你好,非常感谢,这个东西集群能使用么?谢谢!

214

帖子

4

威望

1767

eV
积分
2061

Level 5 (御坂)

 楼主| 发表于 2018-11-12 09:58:38 | 显示全部楼层
xaomidaxue 发表于 2018-11-12 08:26
你好,非常感谢,这个东西集群能使用么?谢谢!

集群有专门的模块管理系统,比如Environment Modules和lmod。
http://modules.sourceforge.net/
https://www.tacc.utexas.edu/rese ... /tacc-projects/lmod

75

帖子

0

威望

1698

eV
积分
1773

Level 5 (御坂)

发表于 6 天前 | 显示全部楼层
万里云 发表于 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

至于环境变量配置文件,看几个超算上的软件例子也很容易写出来。
您需要登录后才可以回帖 登录 | 现在注册!

本版积分规则

手机版|北京科音自然科学研究中心|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949-1号 )

GMT+8, 2018-12-19 20:48 , Processed in 0.132051 second(s), 28 queries .

快速回复 返回顶部 返回列表