我想使用一些需要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
经过多次努力,我发现两者都没有好结果。
答案 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。