Pmod使用说明

时间:2019-10-09 18:08来源:使用说明
这种方式有几个缺点□□□□,最严重的就是要输很多环境变量名□□□□。有几个环境变量名很长□□□□□,一旦输错一个字母□□□□,轻则软件不能正常运行□□□□□□,重

  这种方式有几个缺点□□□□,最严重的就是要输很多环境变量名□□□□。有几个环境变量名很长□□□□□,一旦输错一个字母□□□□,轻则软件不能正常运行□□□□□□,重则连□□□□□□。相比于直接操作环境变量□□,更为安全的方式是定义一个函数□□,通过这个函数修改环境变量□□□□□:

  这样每个环境变量名只需输入一次□□□□,极大地降低了出错的概率□□□□。但这种方法并非十分完美□□□。每次添加新软件的配置信息□□□□□□,或者移除旧软件□□□,都要修改~/□□□□□.bashrc并重新登录□□□□□,非常麻烦□□□。如果一台服务器由几个人共用□□□□,管理员需要为每个人准备一份~/□□□□□.bashrc□□□□。况且不同软件间一般存在依赖或冲突关系□□,例如QE依赖MKL和MPI□□□□□□,如果这两个组件未正确设置就会报错□□□□;ADF和ORCA等软件所需要的特定版本的MPI□□□□,一般又和系统中已安装的MPI冲突□□□。通过修改~/□□□□.bashrc来设置软件运行环境□□□□□□,每次都要改动很多地方□□□□,既费时费力□□□□□,又容易出错□□。如果有程序能根据需要自动设置环境变量□□□,使用软件时就会轻松很多□□□□。

  环境模块系统(Environment module)就是为解决这类问题而设计的软件□□□□□□。目前环境模块系统有Environment Modules (又名Tmod)和Lmod□□□□,以及一个比较古老的Cmod和用shell script写的dotkit等几种□□。配置Tmod需要学习TCL□□□□,Lmod需要学习Lua□□□□。两门语言都相对小众□□□□,有一定的学习成本□□□□。另外□□,一些软件如Intel编译器□□□□□□、Gaussian□□□、ADF等都提供了初始化脚本来设置运行环境□□□□□。但无论Tmod还是Lmod都不建议用户使用这种脚本□□□□□□,也没有运行脚本的功能□□□,而是提供了工具将之转换成各自的配置文件□□□□□□,这就不是很方便□□□。于是就用Python自己写了一个简单的环境模块系统Pmod□□□□。使用说明软件原理不复杂□□□□,核心部分是这样一个函数□□□:

  shell把命令行参数传给python脚本□□,由脚本确定需要修改哪些环境变量并输出相应指令□□□□,再由shell执行该指令□□□□□□。Tmod和Lmod也是基于这种设计思路□□□□。使用说明目前Pmod已具有模块加载与卸载□□□、自动解决冲突和依赖关系□□□□□、查看模块内部配置信息和加载状态□□□□□、根据名称搜索模块等功能□□,项目放在GitHub上□□□□:□□□□□。

  Pmod只依赖Python标准库□□□□□,因此只要系统中安装了Python即可运行□□□□□□,对Python版本也无限制□□□,2□□□.x或3□□□□.x均可□□□□□。具体安装过程如下□□:

  ①下载源码并解压到安装目录□□□□□□,若供多人使用可解压到/opt□□□,仅单人使用可解压到$HOME□□□;

  这些都是例子中预设的模块□□,仅作示范用□□□□□□。用户需要根据需求□□□□□,添加自己的模块□□□□。在讲解如何添加模块之前□□,先简单介绍Pmod的内部架构□□□□。

  第一个无名参数为模块名称□□□□,如果模块不存在则创建之□□,已存在则向该模块添加配置信息□□□。除mod_class关键字外□□,剩下的关键字参数最终都传递到Module类的add settings()方法□□□□□□。该方法接受的关键字参数如下□□□:

  environ参数指定无法通过preset和destination设置的环境变量配置信息□□。这个参数是一个列表□□,每个元素是一个由三个元素组成的元组□□□。元组中第一个元素指定对环境变量进行何种操作□□□□□,取值为reset□□□、append和prepend三种□□□□□,分别代表重设□□、在尾部追加字符串和在头部插入字符串□□□□;第二个元素为环境变量名称□□□;第三个元素为修改环境变量所用的字符串□□□□□。在上面所给出的GPAW例子中□□□□,environ参数表示将环境变量GPAW_SETUP_PATH重设为/opt/gpaw/1□□□□.4□□.0/data/gpaw-setups-0□□□□□.9□□.20000□□□。此外□□□□,environ参数多用于加载编译器时设置相关环境变量□□□:

  depend和conflict参数指定与当前模块所依赖的模块□□□□□,以及与之冲突的模块□□。每个参数都是一个列表□□□,列表内元素为模块的名称□□□□,具体参见上面GPAW的例子□□□□。需注意□□,在加载和卸载模块时□□□□□□,依赖和冲突关系会被递归展开□□。例如□□□□□□,IntelMPI依赖IntelCC□□□□,又与各OpenMPI冲突□□□□□□;作为依赖IntelMPI的VASP□□□□,其depend参数只需包含IntelMPI□□,而conflict参数无需设置□□:

  在加载VASP模块时□□□,Pmod会自动检测并卸载各OpenMPI模块□□□□□,并加载IntelCC和IntelMPI模块□□□□□□。当有大量模块依赖同一模块时□□,可以从Module类派生新的类□□□,重载__init__()方法□□□,在其中将所依赖模块加入depend列表□□□□□□,然后将派生类作为mod_class参数传给create_mod()方法□□□□□□,如下图所示□□□□□:

  这样便可进一步降低出错的概率□□□。详细的例子参见examples/hierarchy□□□□□□。

  command参数指定额外的初始化命令□□□□□□,是一个由字符串组成的列表□□□□。每个字符串即一条命令□□□,一般用来运行初始化脚本□□□。alias参数指定创建哪些命令别名□□□,是一个由元组组成的列表□□。每个元组包含两个字符串□□:别名和命令□□□□□。这两个参数的例子如下□□:

  如果加载了某模块后不慎修改了相关环境变量□□,该模块就会被标记为broken□□□□□□。例如□□□,IntelCC模块将CC设置为icc□□□□□□,若将CC修改为gcc□□□□□□,则该模块□□□□“损坏□□□”□□。

  该命令是module stat的简化版□□□,在Pmod内部也由同一个函数完成□□□□。

  自动模式下卸载指定模块时□□□,使用说明会同时卸载其依赖模块□□□。但若依赖模块仍被其它模块使用□□□□□□,则不会被卸载

  各软件间往往存在依赖或冲突关系□□□,因此仅仅加载某个模块□□□□□□,软件一般无法运行□□□□□□。Pmod提供了自动模式解决这个问题□□□□□□。在自动模式下□□,除了加载指定模块外□□,使用说明还执行如下操作□□□□:

  自动模式保证了已加载的模块都可用□□,不足之处就是module load和module unload命令的效果和用户预期有差别□□□□□□。例如□□□□□,VASP依赖IntelMPI□□□□,在不卸载VASP的情况下无法卸载IntelMPI□□;而卸载VASP的同时□□□□□□,也会连IntelMPI一起卸载□□□□。因此□□,Pmod提供了-f/--force_no_auto选项以禁用自动模式□□。

  物理宇宙学的奠基者和系外行星的发现者 2019年诺贝尔物理学奖解读

  感理性详细解读2019年诺贝尔物理学奖II-关于系外行星□□:观测□□□□、小尺度□□□□□□、到哪去□□、使用说明不负有心

  感理性详细解读2019年诺贝尔物理学奖I-关于物理宇宙学□□□:理论□□□□□、大尺度□□□□□□、从哪来□□□、不负有心

编辑:使用说明 本文来源:Pmod使用说明

关键词: 使用说明

友情链接:www.gidkatrin.com www.syjiaodai.com www.biggbLog.com www.cent88.com www.biggbLog.com www.tjruitian.com