安装 rpy2 以在 OSX 上与 R 3.4.0 配合使用



我想使用一些需要 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 导入对象 文件 "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/rpy2/robjects/init.py",第 16 行,在 导入 rpy2.r接口作为 rinterface 文件 "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/rpy2/rinterface/init.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(: Library not loaded: @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 R。另一种解决方案是解决错误

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

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

我卸载了 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

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

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

相关内容

最新更新