Rpy2在安装

时间:2015-06-18 17:06:43

标签: python r rpy2

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的documentation says有一个简单的选项来指定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"

然后一切正常!

2 个答案:

答案 0 :(得分:1)

如果R位于非常规位置,最简单的可能是通过设置环境变量来帮助一点(旧版本的doc正在讨论--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}

答案 1 :(得分:1)

我在安装过程中使用以下相对路径使用非标准R位置构建rpy2取得了最佳成功:

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

请注意,您只需要在终端中将其导出,然后运行python setup.py install而不是.bashrc等。它会将此库路径存储在rpy2编译的部分中。

这是一个比LD_LIBRARY_PATH更好的选择,有些人认为这是邪恶的:

Preserving whitespace in PDF after XSL transform

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