在Ubuntu上安装R(CRAN)+ rpy2 -> 找不到libRblas.so

4
我正在尝试在Ubuntu(11.04,Natty Narwhal)上构建R(尝试了2.14.2和2.15)和rpy2(2.2.6,Python 2.7.1),以部署到自定义目录(以下称为/home/me/lib/R),因为我没有root访问权限,但需要比服务器上可用的更新版本。更多构建细节等详见下文,但即使在运行rpy2测试时,我始终会收到以下错误:
/home/me/lib/pythonlib/lib/python/rpy2/rinterface/__init__.py in <module>()
---> 87 from rpy2.rinterface._rinterface import *
ImportError: libRblas.so: cannot open shared object file: No such file or directory
WARNING: Failure executing file: <experiments/arrangement/test_smacof_arrange.py>

我确认正在调用正确的rpy2模块(我的自定义构建),该模块已针对自定义构建的R版本进行构建。为此,我执行以下操作:

  1. I first Build R-base on ubuntu

    wget http://cran.r-project.org/bin/linux/ubuntu/natty/r-base_2.14.2.orig.tar.gz
    # untar and go to directory
    
    # enable-R-shblib flag is needed for rpy2 linking, enable-BLAS-shlib was included
    # because I hoped to solve the problem, which doesnt change anything however
    ./configure --enable-R-shlib --enable-BLAS-shlib --prefix=/home/me/lib/R
    make
    make install
    
  2. I then build rpy2 against this R build

    wget http://pypi.python.org/packages/source/r/rpy2/rpy2-2.2.6.tar.gz
    # untar and go to directory
    
    # build rpy2, by providing the r-home-lib and r-home flags, and deploy to custom dir
    python setup.py build --r-home /home/me/lib/R --r-home-lib /home/me/lib/R/lib64/R/lib install --home /home/me/lib/pythonlib
    

    I also have adapted my pythonpath to find modules in /home/me/lib/pythonlib, so the problem isn't there. The python build returns the correct configuration (note that Rblas appears here!)

    Configuration for R as a library:
    include_dirs: ('/home/me/lib/R/lib64/R/include',)
    libraries: ('R', 'Rblas', 'Rlapack')
    library_dirs: ('/home/me/lib/R/lib64/R/lib',)
    extra_link_args: ()
    

我已经试图追踪错误,但一直没有结果。/home/me/lib/R/lib64/R/lib包含libRblas.so,但有一件事情看起来很奇怪,就是libRblas.so从libR.so没有正确链接,但我不确定这是否会导致错误,也不知道如何修复它。

>> ldd -d libR.so

linux-vdso.so.1 =>  (0x00007fffcec58000)
libRblas.so => not found
libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3 (0x00007fe63d21d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe63cf97000)
...

任何帮助都会受到高度赞赏!
2个回答

6

对于遇到此问题的其他人,我解决了该问题,方法是确保在bashrc中将R库添加到我的库路径中:

export LD_LIBRARY_PATH="R-install-location/lib65/R/lib:$LD_LIBRARY_PATH"

将此行添加到 /etc/environment 中,以使其默认启用所有用户。 - PDiracDelta

2
简要概述:
  1. 为什么在Ubuntu上构建R?只需从CRAN存储库获取现有和当前的二进制文件,如http://cran.r-project.org/bin/linux/ubuntu中的README所述--这些是通过CRAN提供的当前Debian软件包的端口,以克服正常的Ubuntu发布滞后。

  2. 每当我需要在Ubuntu上安装一个更新的(小)软件包时,我只需获取Debian软件包源并在Ubuntu上重新构建。网络上应该有足够的HOWTO说明如何构建软件包;最少的步骤是a)下载三元组.orig.tar.gz、.diff.gz和.dsc,并使用dpkg-sourcepackage -x *.dsc进行扩展,然后b)切换到目录并运行sudo debian/rules binary(前提是您已经安装了所有Build-Depends:软件包)。您甚至可以使用apt-get来为您完成这些步骤,但这已经超出了本问题的范围...


1
我的问题是我必须将其安装到非标准目录中,因为我没有root权限。据我所知,这些二进制文件是为标准的Ubuntu目录结构构建的? - flinz
1
我没有尝试过,但我认为你可以指示dpkg将.deb解包到另一个目标目录。然后,您可以设置LD_LIBRARY_PATH等来适应。 - Dirk Eddelbuettel
嗯,如果是这样的话那应该可以行得通并且是一个有效的解决方法。我会试一试的。谢谢,虽然我还不能点赞,但如果可以的话我会点赞的。 - flinz
对于我们的使用情况,Debian/Ubuntu 上的 R 安装版本太旧了。 - samxiao
@xbeta:你可以获取已构建的多个软件包的关键包,即使是针对旧版本的 Ubuntu(trusty、xenial 和 bionic),也能如此。换句话说,安装当前的 R(3.6.2)和 rpy2(3.2.6)在 Ubuntu 上变得容易且无需费力。如果需要帮助,请访问 r-sig-debian 列表并提出问题。评论框不是提供详细帮助的好地方。 - Dirk Eddelbuettel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接