2014-03-25 27 views
3

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

+1

顺便说一句 - 这是一个软件开发问题,而不是系统管理问题。因此,我已投票将此迁移到StackOverflow。另外,如果您对如何在集群上运行事情有疑问,那么询问运行集群的人员似乎是合适的。 – EEAA

回答

0

首先,该解决方案是否适用于您取决于群集的设置方式。这就是说,你的问题的一般解决方案如下。如果计算集群可以像访问主目录一样访问相同的文件,我没有看到为什么这种方式无效。


您需要使用virtualenv。在你的virtualenv中安装你的软件以及你需要的任何额外的python软件包。然后在批量bash脚本中,提供该virtualenv内的python解释器的完整路径。

注意:要在virtualenv中安装python软件包,您需要使用virtualenv中的pip实例,而不是系统pip。

例子:

$ virtualenv foo 
$ cd foo 
$ ./bin/pip install numpy 
在bash脚本

然后:

/path/to/foo/bin/python /path/to/your/script.py 
+0

我刚刚创建了一个运行'哪个python'的bash脚本,我注意到输出不是我的python副本。但是当我在我的ssh帐户上运行“哪个python”时,我得到了我的副本。 –

+0

尝试执行我建议的操作 - 您将提供您自己的python副本以供群集运行。严肃地说,就是和运行集群的人交谈。我可以清楚地不知道他们是如何设置的,显然你也不知道。与他们交谈将成为您解决问题的最快途径。 – EEAA

1

你可以简单地从bash脚本的东西,如打电话给你的Python程序:PYTHONPATH=$HOME/lib/python /path/to/my/python my_python_script

我不了解SunGrid的工作原理,但如果它使用的用户不是您的用户,则需要对您的$HOME进行全局读取。或者至少到Python库。