我需要在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'
我不知道什么是错的,任何人都可以帮助我吗?
答案 0 :(得分:2)
好的,我想我知道问题出在哪里。从shell中试用type module
,了解系统中当前如何module
。您将收到两个选项:它是别名还是函数。这是因为module
命令是alias
或shell function
。
假设您的脚本是以下running.sh
:
#!/bin/bash
module load python/2.7.3
python /home/hw1u16/project/trainAgent.py
(添加shebang是一个好习惯)
要解决此问题,您有两种选择:
source
scitpt。换句话说,执行:source running.sh
。这与直接在交互式shell中键入module
命令完全相同。但是,通过执行./running.sh
,您将运行一个新的非交互式shell。这些通常没有设置标准别名和shell函数。
从脚本中找到定义module
命令和source
命令的初始化脚本
答案 1 :(得分:1)
我遇到了类似的问题,并找到了两种解决方案:
您可以使用sh yourscript.sh
来运行脚本,而不用./yourscript.sh
或. yourscript.sh
来运行脚本,这将正确地获取模块并运行脚本
如果您不想使用. yourscript.sh
,则可以按照DavidC的答案中的说明,将{@ {1}}的shebang修改为#!/bin/sh
,并以{{1 }}请注意,以#!/bin/bash
的身份运行将无法正常工作