安装rpy2以在OSX上使用R 3.4.0

时间:2017-06-29 22:49:40

标签: r conda python-3.6 rpy2 libiconv

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

我安装了R版本3.4,它位于/Library/Frameworks/R.framework/Resources但是,当我使用pip3 install rpy2安装并使用/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6)中的python 3.6.1作为我的翻译时,我得到错误:

  

追踪(最近一次通话):     文件“/Users/vincentliu/PycharmProjects/magic/rpy2tester.py”,第1行,in       来自rpy2 import robjects     文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/rpy2/robjects/init.py”,第16行,in       将rpy2.rinterface导入为rinterface     文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/rpy2/rinterface/init.py”,第92行,       来自rpy2.rinterface._rinterface import(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

经过多次努力,我发现两者都没有好结果。

2 个答案:

答案 0 :(得分: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中libiconv的架构不兼容,导致make回到usr/lib中的过时libiconv。这很奇怪,因为我的机器应该在x86_64而不是i386上运行。然后我尝试了export ARCHFLAGS="-arch x86_64"并使用端口重新安装了libiconv。这解决了这个问题。

答案 1 :(得分:0)

我已经卸载了已安装的版本pip,并从下载源extension上的源python setup.py install安装。 FWIW也不使用Anaconda。