我有一个使用Scientific Linux的计算群集的帐户。当然我只有用户访问权限。我正在使用python,我需要运行python脚本,所以我需要导入一些python模块。由于我没有root访问权限,因此我在$ HOME上安装了一个包含所有必需模块的本地python副本。当我在我的帐户(托管节点)上运行脚本时,它们正确运行。但是为了将作业提交到计算队列(在更快的机器上处理),我需要提交一个bash脚本,该脚本具有执行脚本的行。计算群集使用SunGrid Engine。但是,当我提交bash脚本时,我收到一个错误,我找不到我安装的模块!我无法弄清楚出了什么问题。我希望你能帮忙。
答案 0 :(得分:1)
你可以简单地用bash脚本调用你的python程序:PYTHONPATH=$HOME/lib/python /path/to/my/python my_python_script
我不知道SunGrid是如何工作的,但如果它使用的用户与您的不同,则需要对$HOME
进行全局读取访问。或者至少是python库。
答案 1 :(得分:0)
首先,此解决方案是否适合您,在很大程度上取决于群集的设置方式。也就是说,您的问题的一般解决方案如下。如果计算群集可以访问与您在主目录中相同的文件,我认为没有理由说这不起作用。
您需要使用virtualenv。在virtualenv中安装你的软件以及你需要的任何其他python包。然后在批处理bash脚本中,提供该virtualenv 中python解释器的完整路径。
注意:要在virtualenv中安装python包,你需要使用virtualenv中的pip实例,而不是系统点。
示例:
$ virtualenv foo
$ cd foo
$ ./bin/pip install numpy
然后在你的bash脚本中:
/path/to/foo/bin/python /path/to/your/script.py
答案 2 :(得分:0)
您是否尝试过将它们添加到python代码中?
import sys
sys.path.append("..")
from myOtherPackage import myPythonFile
当我在Cluster上运行它并希望从其他包“ myOtherPackage”中调用“ myPythonFile”时,这对我的代码非常有效