通过计算集群加载python模块

时间:2014-03-25 16:01:08

标签: linux python distributed-computing

我有一个使用Scientific Linux的计算群集的帐户。当然我只有用户访问权限。我正在使用python,我需要运行python脚本,所以我需要导入一些python模块。由于我没有root访问权限,因此我在$ HOME上安装了一个包含所有必需模块的本地python副本。当我在我的帐户(托管节点)上运行脚本时,它们正确运行。但是为了将作业提交到计算队列(在更快的机器上处理),我需要提交一个bash脚本,该脚本具有执行脚本的行。计算群集使用SunGrid Engine。但是,当我提交bash脚本时,我收到一个错误,我找不到我安装的模块!我无法弄清楚出了什么问题。我希望你能帮忙。

3 个答案:

答案 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”时,这对我的代码非常有效