2015-06-11 84 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