“Epyought Canopy”中的“rpy2”失败(与内部GFORTRAN库冲突)

时间:2014-01-09 03:42:32

标签: python r enthought rpy2 canopy

我尝试使用pip(在Ubuntu 12.04上)在Enthought Canopy上安装rpy2。该软件包似乎安装成功,但是当我尝试导入它时:

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),ipython-note书中的R_magic不起作用!

似乎rpy2链接到系统的gfortran库,而Enthought尝试加载自己的FORTRAN库!报告了类似的问题here。 LD_PRELOAD是一个不错的解决方案,因为运送Enthought FORTRAN库有什么意义!?

似乎还有另一个Enthought FORTRAN库与linux(Ubuntu)中的GFORTRAN库冲突了!与Enthough一起运送的图书馆有问题,或者没有合适的方法来解决这种冲突。无论哪种方式,对于主要关注科学计算的分布(Enthought)一次又一次地发生这种冲突并不好!

1 个答案:

答案 0 :(得分:4)

对于自定义程序包,libgfortranlibblas出现了同样的错误。正如您所提到的,Canopy正在使用自己的libgfortran.so.3,遮蔽系统或库路径中的那个(看似blas所需)。以下是针对此问题和类似问题的解决方法,基于更改Canopy中的libgfortran符号链接:

导航到Canopy的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帖子:libgfortran: version `GFORTRAN_1.4' not found