skw*_*ang 6 python linux bash environment-modules
我需要在 HPC 集群中执行 Python 脚本。不幸的是,默认的python版本只有2.6.6,并且没有numpy和scipy。
我可以在命令行中加载这些模块
#module load /home/hw1u16/modules/2.7.3
Run Code Online (Sandbox Code Playgroud)
和
module load /home/hw1u16/modules/1.6.2
Run Code Online (Sandbox Code Playgroud)
但是,当我像这样编写 bash 脚本时
module load /home/hw1u16/modules/2.7.3
module load /home/hw1u16/modules/1.6.2
python /home/hw1u16/project/trainAgent.py
Run Code Online (Sandbox Code Playgroud)
它警告我
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'
我不知道出了什么问题,有人可以帮助我吗?
我遇到了类似的问题,找到了两种解决方案:
您可以运行它,而不是使用sh yourscript.sh或运行脚本。这将正确获取模块并运行脚本./yourscript.sh. yourscript.sh
如果您不想使用. yourscript.sh,您可以按照 DavidC 的答案中所述将 shebang 从 修改为#!/bin/sh,#!/bin/bash并将脚本运行为 注意./yourscript.sh,运行它sh yourscript.sh不会工作
好吧,我想我知道问题出在哪里了。尝试type module从 shell 中查看module它当前在您的系统中是如何定义的。您将收到两个选项:别名或函数。这是因为该module命令是aliasor shell function。
假设您的脚本如下running.sh:
#!/bin/bash
module load python/2.7.3
python /home/hw1u16/project/trainAgent.py
Run Code Online (Sandbox Code Playgroud)
(添加 shebang 是一个很好的做法)
要解决这个问题,您有两种选择:
source脚本。换句话说,做:source running.sh。module这与直接在交互式 shell 中键入命令完全相同。但是,通过执行./running.sh,您将运行一个新的非交互式 shell。这些通常没有设置标准别名和 shell 函数。
从脚本中找到定义module命令的初始化脚本source