此答案将涵盖在 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 轻松找到说明。
呼。