我希望在集群计算系统上运行我的Python程序。 由于我在集群的每个节点上都没有root访问权限,因此我需要在本地目录中安装Python和模块,并从那里运行我的代码。 为了节省时间,我可以在其中一个节点上进行本地 Python 构建,对其进行 tar 处理,并将焦油的 Python 保存在代理服务器上。 然后,当我想在其余节点上运行我的代码时,我只需获取焦油的 Python,解压缩它,然后运行我的程序。 所以基本上我只需要构建一次 Python,然后就可以在集群上反复使用它;我在集群上运行的代码如下所示:
#!/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。
谢谢!
在每次运行时构建GSL(或Python)绝对没有必要。假设所有节点都可以访问某个共享文件系统,您可以简单地
,- 构建Python,GSL并在共享文件夹中编译Cython代码
- 在提交到批处理队列系统的文件中,更改环境变量(
LD_LIBRARY_PATH
、PATH
等),以便它可以找到可执行文件和必要的库。
可能失败的原因是path/where/libgsl/is
未挂载在节点上。请与系统管理员联系有关该问题。所用批处理系统的细节也将影响如何完成这项工作。