【问题标题】:Rpy2 can't find my R libraries on installRpy2 在安装时找不到我的 R 库
【发布时间】:2015-09-04 11:00:15
【问题描述】:

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"

然后一切正常!

【问题讨论】:

  • @Hack-R 为什么?我不明白这有什么关系。
  • @Hack-R 这不是我的问题所在。我在询问安装 Rpy2,以及在安装时它需要如何知道 R 的位置及其相关材料。此时 Rpy2 甚至没有安装。
  • 您是否将 R 编译为共享库?另外,你不做pip install rpy2的任何原因?
  • "您是否将 R 编译为共享库?"我不知道你的意思。我在没有 root 权限的情况下编译了它,所有内容都在我的 ~/ 目录中。我没有使用pip install rpy,因为它产生了相同的错误,而且我认为从源代码构建会打开我原本不会拥有的编译选项(例如--r-home)。
  • 在配置步骤中,使用./configure --enable-R-shlib。我还看到您有libRblas.solibRlapacks.so,但没有libR.so。可能会准确地分享你如何编译 R 会给可能发生的事情提供有用的提示......

标签: python r rpy2


【解决方案1】:

如果 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
  • @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 :感谢您注意到 rpy2 也与 Microsoft R Open 一起工作(我想尝试一天,这是自革命计算时代以来,但一直没有时间)。
【解决方案2】:

我在安装过程中使用以下相对路径在非标准 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

【讨论】:

    【解决方案3】:

    除了从https://cran.r-project.org/bin/macosx/安装R for M1 Mac

    我还必须安装轮子:

    pip install wheel
    

    (见Why is python setup.py saying invalid command 'bdist_wheel' on Travis CI?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-25
      • 2016-01-04
      • 2021-07-05
      • 2017-03-30
      • 2021-02-06
      • 2012-07-18
      • 2011-06-22
      相关资源
      最近更新 更多