我尝试使用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)一次又一次地发生这种冲突并不好!
答案 0 :(得分:4)
对于自定义程序包,libgfortran
和libblas
出现了同样的错误。正如您所提到的,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