2014-01-09 53 views
2

我嘗試使用pip(在Ubuntu 12.04上)在Enthought Canopy上安裝rpy2。該軟件包似乎已成功安裝,但是當我試圖將其導入:Enthought Canopy中的「rpy2」失敗(與內部GFORTRAN庫衝突)

In [1]: from rpy2.rinterface._rinterface import * 
--------------------------------------------------------------------------- 
ImportError        Traceback (most recent call last) 
<ipython-input-1-e2e1fe174266> in <module>() 
----> 1 from rpy2.rinterface._rinterface import * 

/home/kayhan/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/rpy2-2.3.8-py2.7-linux-x86_64.egg/rpy2/rinterface/__init__.py in <module>() 
    99 
    100 
--> 101 from rpy2.rinterface._rinterface import * 
    102 
    103 

ImportError: /home/kayhan/Enthought/Canopy_64bit/User/bin/../lib/libgfortran.so.3: version `GFORTRAN_1.4' not found (required by /usr/lib/libblas.so.3gf) 

沒有這個這個包(rpy2),R_magic在IPython中,記事本不工作!

似乎rpy2鏈接到系統的gfortran庫,而Enthought試圖加載它自己的FORTRAN庫!報道了類似的問題here。 LD_PRELOAD是一個體面的解決方案,因爲運送Enthought FORTRAN庫的意義何在!

它似乎又一個Enthought FORTRAN庫與Linux(Ubuntu)中的GFORTRAN庫衝突! Enthough提供的圖書館都有問題,或者沒有體面的方式來解決這個衝突。無論哪種方式,對於主要關注科學計算的分佈(Enthought)來說,一遍又一遍地發生這樣的衝突是不好的!

+0

嘗試對二進制文件進行「ldd」查看它們鏈接到的庫與它們應該鏈接到的庫。 – adrin

+0

我做到了。它鏈接到系統的GFORTRAN庫,不是Enthought的,但是我可以爲安裝程序指定哪些庫鏈接到? – kayhan

+0

當然可以,您需要設置庫路徑。通過'configure'輸入參數或'LD_LIBRARY_PATH'環境變量。看[這裏](http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html)瞭解更多詳情。 – adrin

回答

4

我對於自定義軟件包有libgfortranlibblas的錯誤。正如你所提到的,Canopy使用自己的libgfortran.so.3,將系統或庫路徑中的一個遮蔽(看起來blas需要)。下面是這個和類似的問題的基礎上,改變林冠libgfortran符號鏈接解決方法:

導航到雨棚下的lib目錄:

cd ~/Enthought/Canopy_64bit/User/lib/

ls -l *gfortran.so.3*應該給你喜歡的東西:

libgfortran.so.3 -> libgfortran.so.3.0.0 
libgfortran.so.3.0.0 

(可選)使libgfortran.so.3備份(如果它不是像一個符號鏈接在這裏):

mv libgfortran.so.3 libgfortran.so.3.bkp 

定位系統庫,如:

locate *gfortran.so.3* | grep /usr/lib 

/usr/lib/x86_64-linux-gnu/libgfortran.so.3 
/usr/lib/x86_64-linux-gnu/libgfortran.so.3.0.0 

使得從系統一個符號鏈接到lib

ln -s /usr/lib/x86_64-linux-gnu/libgfortran.so.3 . 

現在的ls -l *gfortran.so.3*應該給你:

libgfortran.so.3 -> /usr/lib/x86_64-linux-gnu/libgfortran.so.3 

相關SO post:libgfortran: version `GFORTRAN_1.4' not found