在OS X Mavericks上安装RODBC / ROracle软件包

我一直在尝试安装一些软件包,如RODBC,ROracle或RGtk2 – 用于拨浪鼓。 我真的很感激,如果有人能帮我解决这个问题,以便我可以使用这些应用程序在一个苹果与小牛和3.1.1 R

RODBC和RGtk2都出现这种错误:

软件包“RGtk2”可作为源软件包使用,但不能作为二进制文件在install.packages中发出警告:软件包“RGtk2”不可用(对于R版本3.1.1)

当我尝试使用type ='source'时,我可以下载或开始下载,但是我得到这种错误信息…

在install.packages中的警告:安装包“RODBC”具有非零退出状态

这个答案将包括在OS X上安装RODBC和ROracle,特别是在Mavericks和更高版本上。

现在这两个软件包都需要从源代码构build(编译)。 这意味着你需要的第一件事就是下载XCode和相关的“命令行工具”,以便你真正拥有一个编译器。 基本上每一个版本的OS X / XCode都改变了你的操作方式,但是如果你开始使用谷歌search,你可能会在这里登陆。

一旦你有这个地方…

RODBC

自OS X 10.9(Mavericks)以来,Apple停止将iODBC SQL头文件与OS X上的R用户习惯于安装的“命令行工具”一起,以便从源代码构buildR包。

所以如果你在这个时候试图从小牛队的源头上构buildRODBC,你应该得到如下错误:

configuration:错误:“找不到ODBC头sql.h和sqlext.h”

要解决这个问题,您需要下载最新版本的iODBC(www.iodbc.org),然后解压缩文件,并将您的标题和库searchpath设置到解压缩包的位置。 如果你不知道如何设置你的searchpath,你可以把头文件(sql.h和sqlext.h)放在/usr/include目录下, libiodbc.a文件放在/usr/lib目录下。

那么你应该可以做到

 install.packages("RODBC",type = "source") 

没有任何问题。 据推测,这将与另一个主要的开源ODBC项目unixODBC一样好,但我还没有尝试过。

我已经在El Capitantesting了这个(和另一个答案中的自制方法),两者仍然工作。

ROracle

这更复杂。 然而,ROracle可以安装在OS X上(我已经通过El Capitan在Mountain Lion上testing过)。 由于ROracle依赖于Oracle即时客户端,因此没有任何平台可用的二进制文件。 这里有详细的安装说明。

对于OS X,我们需要(大部分)遵循Linux指令。

首先,按照Linuz的说明下载相应的Oracle Instant Client以及SDK。

Linux安装说明提到从RPM安装客户端,将所有东西放在“正确的位置”。 我甚至无法确定是否应用了OS X,所以我只是将客户端解压到我创build的目录中,然后将SDK放入/sdk目录中。

然后Linux安装说明指导我们为libclntsh.so.11.1创build一个符号链接。 由于这是OS X,所以它实际上叫做libclntsh.dylib.11.1。 所以我们需要cd到我们解压客户端的目录然后运行

 ln -s libclntsh.dylib.11.1 libclntsh.dylib 

在OS X上,我们设置DYLD_LIBRARY_PATH ,而不是LD_LIBRARY_PATH

 export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH 

使用任何适合您机器的path。

我从来没有能够得到ROracle与OCI_LIB环境variables编译。 相反,我使用了--with-oci-lib编译器标志选项:

 R CMD INSTALL --configure-args='--with-oci-lib=/scratch/instantclient_11_2' ROracle_1.1-11.tar.gz 

再次使用任何path和ROracle版本号是适当的。

如果使用tnsnames.ora文件连接到Oracle数据库,则还需要设置TNS_ADMIN环境variables以指向该文件的位置。

最后一个问题:你可能会发现,如果你从命令行(即terminal)启动R,这一切都将起作用。 具体来说,如果从GUI启动RGui.app或RStudio.app,然后尝试运行library(ROracle) ,则会收到一个错误,指出

 > library("ROracle") Error in dyn.load(file, DLLpath = DLLpath, ...) : unable to load shared object '/Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle/libs/ROracle.so': dlopen(/Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle/libs/ROracle.so, 6): Library not loaded: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 Referenced from: /Library/Frameworks/R.framework/Versions/3.1/Resources/library/ROracle/libs/ROracle.so Reason: image not found Error: package or namespace load failed for 'ROracle' 

即使Sys.getenv("DYLD_LIBRARY_PATH")忠实地报告了正确的path,也会发生这种情况。

有一段时间,我一起攻击了一个“解决scheme”,在那里我创build了一个在启动时启动RStudio / RGui的shell脚本,并且只需要记住随时启动它们

 open -a R.app open -a RStudio.app 

这个问题显然与OS X中GUI启动的应用程序如何提供环境variables有关。通常情况下,我最终在StackOverflow上find了解决scheme。 编辑/etc/launchd.conf文件解决了这个问题,所以即使从Finder启动RStudio / RGui,ROracle也会加载。 尽pipe这里请注意,Yosemite不再支持/etc/launchd.conf解决scheme。 该答案表明您现在需要设置一个启动plist文件来设置启动时的launchctl环境。

埃尔卡皮坦更新为ROracle

我现在已经在El Capitan的这个坩埚上面了,它的工作方式如上所述,但只有先禁用系统完整性保护 ! 这样做相当快,通过Google很容易find说明。

唷。

如果你有自制的话,那很容易。 在terminal,使用

 brew install unixodbc 

在控制台中,使用

 install.packages("RODBC",type="source") 

希望它会有所帮助

如果您使用MacPorts,请执行以下操作:

 sudo port install unixODBC 

然后,创build(或,如果存在,编辑)您的主目录中的文件

 ~/.R/Makevars 

其中应包含一行

 CFLAGS += -I/opt/local/include 

然后,你可以通过安装RODBC

 install.packages("RODBC",type="source") 

基本上,以上

  • 安装必要的库和头文件
  • 告诉R在哪里find他们
  • 安装RODBC。

你将不得不从源手动构build包。 如果你去RODBC网站,你会注意到这个二进制文件不适用于小牛队。 下载软件包并按照从源代码构build软件包的说明进行操作。 这些是Windows说明,但一般的想法是一样的。 您将需要在特定软件包的构build过程中使用的所有必需的OS软件包。