【问题标题】:Installation of RODBC/ROracle packages on OS X Mavericks在 OS X Mavericks 上安装 ODBC/Oracle 包
【发布时间】:2014-11-30 08:43:45
【问题描述】:

我一直在尝试安装一些软件包,例如 RODBC、ROracle 或 RGtk2 - 用于拨浪鼓。如果有人能帮助我解决这个问题,我将非常感激,这样我就可以在带有小牛和 3.1.1 R 的 Mac 上使用这些应用程序

RODBC 和 RGtk2 都出现这种错误:

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

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

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

【问题讨论】:

  • 请注意,RGtk2 的安​​装说明说它需要单独安装 GTK 库,并且这“可能是一个耗时且明显间接的过程,涉及安装大量子库。”所以要小心。

标签: r oracle rodbc


【解决方案1】:

您必须手动从源代码构建包。如果您访问RODBC 站点,您会注意到二进制文件不适用于 Mavericks。下载包并按照说明从源代码构建包。 These are Windows instructions 但总体思路是一样的。您将需要在特定包的构建过程中使用的所有必要的操作系统包。

【讨论】:

  • '手工构建' ---这是否意味着我必须用新安装的 R 替换我当前的安装?
  • @user3788557 手动构建意味着您需要(我给您现在搜索的关键字)为您的操作系统构建工具链并从源代码编译包。这通常使用R CMD build 完成。我建议您使用您最喜欢的搜索引擎搜索“创建 r 包”。没关系,@joran 已经回答了...
【解决方案2】:

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

现在两个包都需要从源代码构建(编译)。这意味着您首先需要下载 XCode 和相关的“命令行工具”,以便您真正拥有一个编译器。基本上每个版本的 OS X/XCode 都改变了您执行此操作的方式,但是如果您开始使用 Google 搜索,您最终可能会登陆 here

一旦你准备好了......

RODBC

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

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

配置:错误:“找不到 ODBC 标头 sql.h 和 sqlext.h”

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

那你应该可以了

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

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

我已经在 El Capitan 上测试了这个(以及另一个答案中的自制方法)并且两者仍然有效。

ROracle

这更复杂。但是,ROracle 可以安装在 OS X 上(我已经通过 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

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

我永远无法让 ROracle 使用 OCI_LIB 环境变量进行编译。反而, 我使用了--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 或 RStudio.app 从 GUI,然后尝试运行 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

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

ROracle 的 El Capitan 更新

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

呼。

【讨论】:

  • 我在 iODBC 目录中没有看到文件 "libiodbc.a" 使用 "find . -name "libiodbc*" "
  • @Super_John 我发现 iODBC 的所有下载选项非常混乱,它在我下载的其中一个东西中,我现在不记得是哪个。下面的brew 方法也可以工作,并且可能更容易......
  • 同意!很混乱。我终于走了酿造路线,我发现这要容易得多。非常感谢您的帮助。 Tgif!
  • 我正在使用 ox 10 (Yosemite) 并且没有这样的目录 /usr/include。我应该创建这样的吗?我的PATH 包括下一个目录:/usr/local/bin/:/usr/bin/:/bin;/usr/sbin/:/sbin/
  • @user890739 我认为安装 Xcode 附带的命令行工具应该会创建 /usr/include 树,所以如果它丢失了,你可能没有成功地做到这一点。但坦率地说,我现在更喜欢 RODBCbrew 方法。
【解决方案3】:

如果你有自制软件,那就很容易了。 在终端中,使用

brew install unixodbc

在 r 控制台中,使用

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

希望对你有帮助

【讨论】:

  • 对 El Captain 的作用就像一个魅力。比 joran 提出的解决方案最简单
【解决方案4】:

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

sudo port install unixODBC

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

~/.R/Makevars

应该包含一行

CFLAGS += -I/opt/local/include

然后,您可以通过以下方式安装 RODBC

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

基本上,以上

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-01
    • 2014-10-17
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2013-11-11
    • 2013-11-17
    • 1970-01-01
    相关资源
    最近更新 更多