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

时间:2014-10-06 05:11:17

标签: r oracle rodbc

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

我对RODBC和RGtk2都有这种错误:

  

包'RGtk2'可用作源包但不是二进制包   install.packages中的警告:包'RGtk2'不可用(for   R版本3.1.1)

当我尝试使用type =' source'时,我可以下载或开始下载,但后来我收到此类错误消息......

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

4 个答案:

答案 0 :(得分:30)

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

现在需要从源代码构建(编译)这两个包。这意味着您需要的第一件事就是下载XCode和相关的“命令行工具”,以便您实际上拥有编译器。你如何做到这一点已基本上改变了OS X / XCode的每个版本,但如果你开始谷歌搜索,你可能会最终登陆here

一旦你有了......

<强> RODBC

自从OS X 10.9(Mavericks)Apple停止包含iODBC SQL头文件以及 OS X上的R用户习惯于安装以构建R的“命令行工具” 来自源头的包裹。

因此,如果您尝试在Mavericks上从源代码构建RODBC,您应该会收到如下错误:

  

configure:error:“找不到ODBC头sql.h和sqlext.h”

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

然后你应该能够做到

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

没有任何问题。据推测,这也适用于其他主要的开源ODBC项目unixODBC,但我还没有尝试过。

我已经在El Capitan上测试了这个(以及另一个答案中的自制方法),两者仍在使用。

<强> ROracle

这更复杂。但是,可以在OS X上安装ROracle(我已经通过El Capitan对Mountain Lion进行了测试)。由于ROracle依赖于Oracle Instant Client,因此没有可用的二进制文件 任何平台。包here包含详细的安装说明。

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

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

Linux安装说明提到从RPM安装客户端,这将把所有内容“放在正确的位置”。我无法弄清楚是否应用了OS X,所以我只是将客户端解压缩到我创建的目录中,并将SDK放在/sdk中的该目录中。

Linux安装说明然后指示我们为libclntsh.so.11.1创建符号链接。以来 这是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

使用适合您机器的任何路径。

我无法使用OCI_LIB环境变量来编译ROracle。代替, 我使用了--with-oci-lib编译器标志选项:

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

再次使用任何路径和ROracle版本号是合适的。

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

最后一个问题:你可能会发现(正如我所做的)只有在你启动R时才会有效 从命令行(即终端)。具体来说,如果您启动RGui.app或 来自GUI的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")忠实地报告,也会发生这种情况 正确的道路。

有一段时间,我一起攻击了一个“解决方案”,在那里我创建了一个启动的shell脚本 RStudio / RGui在启动时,只需要记住随后通过

随后启动它们
open -a R.app
open -a RStudio.app

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

针对战神的El Capitan更新

我现在已经浏览了El Capitan中的这个坩埚,它的工作原理如上所述,但前提是你首先禁用系统完整性保护!这样做相当快,并且可以通过Google轻松找到说明。

呼。

答案 1 :(得分:24)

如果你有自制软件,这将很容易。 在终端中,使用

brew install unixodbc

在r控制台中,使用

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

希望它会有所帮助

答案 2 :(得分:2)

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

sudo port install unixODBC

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

~/.R/Makevars

应该包含一行

CFLAGS += -I/opt/local/include

然后,您可以通过

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

基本上,以上

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

答案 3 :(得分:0)

您必须手动从源代码构建软件包。如果你去了RODBC网站,你会发现小邮件不适用于小牛队。下载软件包并按照从源代码构建软件包的说明进行操作。 These are Windows instructions但总的想法是一样的。您将需要在特定包的构建过程中使用的所有必需的OS包。