3

我需要在 HPC 集群中执行 Python 脚本。不幸的是,默认的python版本只有2.6.6,没有numpy和scipy。

我可以在命令行中加载这些模块

#module load /home/hw1u16/modules/2.7.3

module load /home/hw1u16/modules/1.6.2

但是,当我像这样编写 bash 脚本时

module load /home/hw1u16/modules/2.7.3
module load /home/hw1u16/modules/1.6.2
python /home/hw1u16/project/trainAgent.py

它警告我

ModuleCmd_Load.c(200):ERROR:105: Unable to locate a modulefile for '/home/hw1u16/modules' ModuleCmd_Load.c(200):ERROR:105: Unable to locate a modulefile for '/home/hw1u16/modules' 不知道怎么回事,有大神可以帮帮我吗?

4

2 回答 2

5

我有一个类似的问题,并找到了两个解决方案:

  1. sh yourscript.sh而不是使用or运行脚本./yourscript.sh,您可以运行它,因为. yourscript.sh这将正确获取模块并运行脚本

  2. 如果您不想使用,. yourscript.sh您可以按照 DavidC 的回答中所述将 shebang 从#!/bin/sh修改为#!/bin/bash./yourscript.shsh yourscript.sh

于 2019-12-05T21:11:07.863 回答
3

好吧,我想我知道问题出在哪里了。尝试type module从 shell 中查看module它当前在您的系统中是如何定义的。您将收到两个选项:它是别名或函数。这是因为module命令是aliasor shell function

假设您的脚本如下running.sh

#!/bin/bash  
module load python/2.7.3
python /home/hw1u16/project/trainAgent.py

(添加shebang是一个好习惯)

要解决此问题,您有两种选择:

  • 选项1:

sourcescitpt。换句话说,做:source running.sh. module这与直接在交互式 shell中键入命令完全相同。但是,通过这样做./running.sh,您正在运行一个新的非交互式 shell。这些通常没有设置标准别名和 shell 函数。

  • 选项 2:

从脚本中找到定义module命令的初始化脚本及其source

于 2017-07-20T20:32:36.337 回答