2015-06-11 50 views
2

我希望在集群计算系统上运行我的Python程序。由于我在群集的每个节点上都没有root访问权限,因此我需要将Python和我的模块安装在本地目录中并从那里运行我的代码。为了节省时间,我可以在其中一个节点上执行本地Python构建,将其tar,并将tar tar保存在代理服务器上。然后,当我想在其余的节点上运行我的代码时,我只需将焦油Python解压缩,然后运行我的程序。所以基本上我只需要构建一次Python,然后可以在集群上重复使用它;我在群集上运行的代码如下所示:在集群上使用Python,Cython和GSL

#!/bin/bash 
wget www.proxyserver.Local_Python_Build.tgz 
tar xzf Local_Python_Build.tgz 
./Local_Python_Build/bin/python my_python_code.py 

我遇到了一个主要问题。首先,我的主代码使用我写的一些需要GSL的Cython程序。当我进行Python的初始安装时,我也做了GSL的本地构建,以及编译Cython代码(所有代码都包含在tar中)。我已经检查过,确保在构建它之后所有东西都能正确运行,但是一旦我在集群上提交它,代码就无法工作。我不断收到以下错误:

ImportError: libgsl.so.0: cannot open shared object file: No such file or directory 

现在,我已经尝试添加到的路径libgsl.so.0位于LD_LIBRARY_PATH目录,但不工作;即

export LD_LIBRARY_PATH=path/where/libgsl/is 

我担心每次运行我的代码时都需要构建GSL;即运行下面的代码:

#!/bin/bash 
wget www.proxyserver.Local_Python_Build.tgz 
tar xzf Local_Python_Build.tgz 
install GSL 
Compile Cython Code 
./Local_Python_Build/bin/python my_python_code.py 

这显然会增加我的运行时间,这我希望避免的。任何想法?计算群集运行Linux。

谢谢!

+0

什么样的集群?查看是否安装了virtualenv。它可能允许您在其中安装所需的工具。 – Aditya

+1

它是一个Linux集群。节点非常精简,我很确定virtualenv没有安装。但是我可以检查一下.v一些额外的信息:集群上有许多不同的Linux发行版,程序在某些版本(例如RHEL 6.6)上运行良好,但在其他版本(RHEL 6.4)上运行得很好。 – shadowprice

+0

您在RHEL 6.4上遇到什么错误? – rth

回答

2

在每次运行(或者Python)中构建GSL都绝对没有必要。假设,所有的节点访问某些共享文件系统,你可以简单地,

  1. 构建Python,GSL和编译用Cython代码共享文件夹
  2. 在该文件中,您提交到批队列系统,你改变环境变量(LD_LIBRARY_PATH,PATH等),以便它可以找到可执行文件和必要的库。

可能失败的原因是path/where/libgsl/is未安装在节点上。请向系统管理员咨询有关该问题。使用的批处理系统的细节也会影响如何完成这项工作。

+1

所以我不相信节点有权访问共享文件系统。我被告知,我可以运行我的程序的唯一方法是在本地构建Python和我的模块,将其tar,然后使用wget或curl将焦点Python构建发送到每个节点,解压缩它,然后运行我的程序。我相信这个问题的一部分是,集群中的节点使用不同的Linux版本:一些使用RHEL,一些SL和一些Debian(请参阅我以前的评论)。但我会发现,有关安装问题。 – shadowprice

+0

拥有不同Linux发行版的节点确实很混乱。有一个共享文件系统是最方便的,你可以确实使用tar> wget> untar具有相同效果的序列。希望你仍然可以在前端节点上构建所有东西,然后将其复制到所有其他节点(假设它们都是64位),那么可能需要包含更多的共享库,以确保它们相同(也许'libc.so')。它应该是可行的,但可能有点棘手。最后,也许你是对的,并且在每个节点上构建所有模块会更简单。 – rth

+0

您是否认为使用pyinstaller(https://github.com/pyinstaller/pyinstaller)将程序编译为二进制文件并将其作为shell脚本运行会起作用?在理论上,对于具有不同的Linux发行版的节点来说,它是否健壮? – shadowprice