计算化学公社

 找回密码 Forget password
 注册 Register
Views: 4829|回复 Reply: 3
打印 Print 上一主题 Last thread 下一主题 Next thread

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

[复制链接 Copy URL]

403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

源码放在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"])
复制代码
运行效果如图:





评分 Rate

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

查看全部评分 View all ratings

140

帖子

0

威望

393

eV
积分
533

Level 4 (黑子)

2#
发表于 Post on 2018-11-12 08:26:51 | 只看该作者 Only view this author
你好,非常感谢,这个东西集群能使用么?谢谢!

403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

3#
 楼主 Author| 发表于 Post on 2018-11-12 09:58:38 | 只看该作者 Only view this author
xaomidaxue 发表于 2018-11-12 08:26
你好,非常感谢,这个东西集群能使用么?谢谢!

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

136

帖子

3

威望

4184

eV
积分
4380

Level 6 (一方通行)

4#
发表于 Post on 2018-12-13 17:17:29 | 只看该作者 Only view this author
万里云 发表于 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

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

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 16:24 , Processed in 0.323855 second(s), 25 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list