Windows下R安装ROracle报configuration failed错误问题排查
R 4.1.3(renv 0.15.2)安装ROracle 1.3-1.1报'sh' not found解决方案
根因定位
报错核心和Oracle Instant Client配置无关,是Windows环境缺少源码包编译依赖的shell运行环境:ROracle源码包的Windows配置脚本configure.win需要通过sh命令执行,系统找不到sh程序时就会直接触发配置失败。
手动复制Ociver.h到R安装目录include路径的操作属于冗余操作,后续R版本升级或环境迁移时容易出现文件版本不匹配问题,建议先把复制过去的文件删除,统一通过环境变量配置OCI路径。
修复步骤
- 安装匹配R 4.1.x版本的Rtools40工具链,安装时勾选将Rtools加入系统PATH的选项,若安装时未勾选,手动将Rtools安装路径下的
usr/bin目录(默认路径为C:\rtools40\usr\bin)加入系统PATH,该目录内置sh.exe程序,可直接解决sh找不到的问题。 - 开新的命令提示符窗口,执行
sh --version,如果能正常返回shell版本信息,说明sh环境配置生效。 - 校验Oracle相关环境变量配置正确性:
OCI_INC变量值为Instant Client下sdk/include目录的绝对路径,例:C:\oracle\instantclient_19_18\sdk\includeOCI_LIB64变量值为Instant Client根目录的绝对路径,例:C:\oracle\instantclient_19_18- 系统PATH中已添加Instant Client根目录的绝对路径
所有环境变量配置完成后必须完全重启R/RStudio,旧会话不会加载更新后的系统环境变量
- 清理renv的失败安装缓存,在激活项目renv环境的R会话中执行:
unlink("renv/staging/1/ROracle", recursive = TRUE) renv::refresh()
- 重新执行源码包安装命令:
install.packages("ROracle", type = "source")
避坑提示
- R 4.1.3为64位版本,必须匹配64位的Oracle Instant Client,32位客户端会触发架构不匹配的编译错误。
- 若安装完成后加载ROracle时提示找不到oci.dll,检查系统PATH中Instant Client路径的优先级,避免其他软件自带的旧版oci.dll被优先加载。
- 不要在全局R环境安装ROracle后手动复制包文件到renv的私有库路径,必须在激活对应项目renv环境的会话中执行安装,否则会出现路径依赖错误导致包加载失败。
内容的提问来源于stack exchange,提问作者Moulay Abdellah EL IDRISSI EL
相关产品推荐
相关产品推荐

