Rpy2安装时找不到我的R库

3
从源代码编译安装的 R,本地已安装。R 位于 ~/bin/R(在我的 PATH 中),其库位于 ~/lib64/R/。安装 rpy2 应该很简单。它可以很好地找到正确的 R(因为它在路径中)。然后它找不到库。
$python setup.py build install
R version 3.2.1 (2015-06-18) -- "World-Famous Astronaut"

...

setup.py:211: UserWarning: No include specified
  warnings.warn('No include specified')
setup.py:222: UserWarning: No libraries as -l arguments to the compiler.
  warnings.warn('No libraries as -l arguments to the compiler.')

    Compilation parameters for rpy2's C components:
        include_dirs    = []
        library_dirs    = []
        libraries       = []
        extra_link_args = []

然后我们会遇到无法找到 R 库中的函数而出现了数百万个错误。

Rpy2 的 文档指出,有一种简单的选项可以指定 R 或其库所在的位置:

python setup.py build --r-home ~/lib64/R/lib install

但是如果你这样做,你会得到:
setup.py:222: UserWarning: No libraries as -l arguments to the compiler.
  warnings.warn('No libraries as -l arguments to the compiler.')

    Compilation parameters for rpy2's C components:
        include_dirs    = []
        library_dirs    = []
        libraries       = []
        extra_link_args = []

usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
   or: setup.py --help [cmd1 cmd2 ...]
   or: setup.py --help-commands
   or: setup.py cmd --help

error: option --r-home not recognized

看起来--r-home功能已被删除。那么如何将rpy2指向正确的库?


编辑:

现在已经安装了R:

./configure --prefix=${HOME} --enable-R-shlib
make
make install

在这之后,我可以只使用pip install rpy2安装rpy2。但是,我们仍然存在库问题:

import rpy2.robjects as robjects
ImportError: libRblas.so: cannot open shared object file: No such file or directory

所以我需要将这个添加到我的路径中:

export LD_LIBRARY_PATH="~/lib64/R/lib:$LD_LIBRARY_PATH"

然后一切就可以正常工作了!


@Hack-R 为什么?我不明白那与此有何关系。 - jeffalstott
@Hack-R,这不是我的问题。我正在询问如何安装Rpy2,以及在安装过程中它需要知道R及其相关材料的位置。此时,Rpy2甚至无法安装。 - jeffalstott
你是否将R编译为共享库?另外,你不使用pip install rpy2的原因是什么? - lgautier
你编译 R 时用的是共享库吗?我不明白你的意思。我在没有 root 权限的情况下将它编译了,所有文件都在我的 ~/ 目录中。我没有使用 pip install rpy,因为它出现了同样的错误,而且我认为从源代码构建可以打开我否则无法使用的编译选项(例如 --r-home)。 - jeffalstott
在配置步骤中,请使用 ./configure --enable-R-shlib。我还看到您有 libRblas.solibRlapacks.so,但没有 libR.so。可能分享一下您编译R的具体方法会对可能发生的情况提供有帮助的提示... - lgautier
3个回答

2
如果R安装在非常规位置,最简单的方法可能是通过设置环境变量来帮助解决问题(旧版本的文档提到了--r-home,但这是一个不太被测试的角落,已被移除)。
尝试:
export PATH=~/bin/R:${PATH}
export LD_LIBRARY_PATH=~/lib64/R/lib:${LD_LIBRARY_PATH}
export PKG_CONFIG_PATH=~/lib64/R/lib/pkgconfig/:${PKG_CONFIG_PATH}

谢谢!我刚试了一下,结果还是一样。输出仍然显示“rpy2的C组件编译参数”的空列表。注意:没有lib64/R/lib/pkgconfig目录。lib64/R/lib中只有libRblas.solibRlapack.so - jeffalstott
@lgautier的解决方案对我有用(无需重新编译R)。我的具体问题是我正在使用Microsoft R open。对于我的MRO版本,我将/etc/environment更改为LD_LIBRARY_PATH="your_old_stuff:/usr/lib64/MRO-3.2.3/R-3.2.3/lib/R/lib"PATH="your_old_stuff:/usr/lib64/MRO-3.2.3/R-3.2.3/lib/R/bin"PKG_CONFIG_PATH="your_old_stuff:/usr/lib64/MRO-3.2.3/R-3.2.3/lib/pkgconfig",其中your_old_stuff表示您的旧环境变量。可能会帮助遇到类似问题的人...请注意,我故意使用/etc/environment,因为我有几个用户调用Rpy2 - cryo111
@cryo111:感谢您提醒我,rpy2也可以与“Microsoft R Open”一起使用(我想有一天尝试一下,自从革命计算公司的时候就想了,但从未找到时间)。 - lgautier

1

我在使用非标准R路径构建rpy2时,使用以下相对路径进行安装取得了最佳效果:

export LDFLAGS="-Wl,-rpath,~/lib64/R/lib"

请注意,您只需要在终端中导出此内容,然后运行 python setup.py install,而不是在您的.bashrc或类似文件中。它将在rpy2编译部分中存储此库路径。
在我看来,这比一些人认为邪恶的LD_LIBRARY_PATH更好。

https://blogs.oracle.com/ali/entry/avoiding_ld_library_path_the

http://linuxmafia.com/faq/Admin/ld-lib-path.html


0

除了从https://cran.r-project.org/bin/macosx/安装M1 Mac的R之外,

我还需要安装wheel:

pip install wheel

(请参见{{link1:为什么在Travis CI上Python setup.py会说无效命令'bdist_wheel'?}})


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