2

我想使用一些需要 R 版本 3.4 及更高版本的 R 包。我想通过 rpy2 (2.8) 在 python (3.6.1) 中访问这些包。

我安装了 R 版本 3.4,它位于/Library/Frameworks/R.framework/Resources但是,当我pip3 install rpy2用来安装和使用 python 3.6.1/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6)作为我的解释器时,我收到错误:

回溯(最后一次调用):文件“/Users/vincentliu/PycharmProjects/magic/rpy2tester.py”,第 1 行,从 rpy2 导入 robjects 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3 .6/site-packages/rpy2/robjects/ init .py",第 16 行,在 import rpy2.rinterface as rinterface File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages /rpy2/rinterface/初始化.py",第 92 行,从 rpy2.rinterface._rinterface 导入 (baseenv, ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/rpy2/rinterface/_rinterface .cpython-36m-darwin.so,2):库未加载:@rpath/libiconv.2.dylib 引用自:/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ rpy2/rinterface/_rinterface.cpython-36m-darwin.so 原因:库版本不兼容:_rinterface.cpython-36m-darwin.so需要8.0.0或更高版本,但libiconv.2.dylib提供7.0.0版本

这首先似乎是由 Anaconda 引起的问题,因此我删除了所有与 Anaconda 相关的文件,但问题仍然存在。

然后我卸载了rpy2,重新安装了Anaconda并用来conda install rpy2安装,它也通过Anaconda安装了R版本3.3.2。然后我可以将解释器更改为/anaconda/bin/python并可以正常使用 rpy2,但我不能使用我关心的 R 包,因为它们需要 R 版本 3.4 及更高版本。显然,Anaconda 可以安装的最旧版本是 3.3.2,那么有什么办法可以将 rpy2 与 R 版本 3.4 一起使用?

我可以看到这个问题的两个通用解决方案。一种是通过 conda 安装 rpy2,然后以某种方式将其依赖的 R 更改为系统中的 3.4。另一种解决方案是解决错误

库版本不兼容:_rinterface.cpython-36m-darwin.so需要8.0.0或更高版本,但libiconv.2.dylib提供7.0.0版本

经过一番挣扎,我发现两者都没有好的结果。

4

2 回答 2

1

我卸载了 rpy2 并重新安装了--verborse. 然后我发现

ld:警告:忽略文件/opt/local/lib/libpcre.dylib,文件是为x86_64构建的,它不是被链接的架构(i386):/opt/local/lib/libpcre.dylib ld:警告:忽略文件/ opt/local/lib/liblzma.dylib,文件是为 x86_64 构建的,它不是被链接的架构(i386):/opt/local/lib/liblzma.dylib ld:警告:忽略文件 /opt/local/lib/libbz2 .dylib,文件是为 x86_64 构建的,它不是被链接的架构 (i386):/opt/local/lib/libbz2.dylib ld:警告:忽略文件 /opt/local/lib/libz.dylib,文件是为x86_64 不是被链接的架构(i386):/opt/local/lib/libz.dylib ld:警告:忽略文件 /opt/local/lib/libiconv.dylib,文件是为不是架构的 x86_64 构建的链接(i386):/opt/local/lib/libiconv.dylib ld:警告:忽略文件 /opt/local/lib/libicuuc.dylib,文件是为 x86_64 构建的,它不是被链接的架构(i386):/opt/local/lib/libicuuc.dylib ld:警告:忽略文件 /opt/local/ lib/libicui18n.dylib,文件是为 x86_64 构建的,它不是被链接的架构(i386):/opt/local/lib/libicui18n.dylib ld:警告:忽略文件 /opt/local/Library/Frameworks/R.framework /R,文件是为 x86_64 构建的,它不是所链接的体系结构 (i386):/opt/local/Library/Frameworks/R.framework/R警告:忽略文件 /opt/local/Library/Frameworks/R.framework/R,文件是为 x86_64 构建的,它不是被链接的架构(i386):/opt/local/Library/Frameworks/R.framework/R警告:忽略文件 /opt/local/Library/Frameworks/R.framework/R,文件是为 x86_64 构建的,它不是被链接的架构(i386):/opt/local/Library/Frameworks/R.framework/R

所以我认为原因是 libiconv in 的体系结构不兼容opt/local,导致 make 退回到过时的 libiconv in usr/lib。这很奇怪,因为我的机器应该在 x86_64 而不是 i386 上运行。然后我尝试export ARCHFLAGS="-arch x86_64"使用端口重新安装 libiconv。这解决了问题。

于 2017-07-05T20:42:44.170 回答
0

我已经卸载了 pip 安装的版本并从python setup.py install下载的源代码安装https://bitbucket.org/rpy2/rpy2/downloads/。FWIW 也根本不使用 Anaconda。

于 2018-12-18T18:48:05.197 回答