Установка ROracle (и Oracle Instant Client?) На MacOS

Я пытаюсь установить ROracle. Поскольку ROracle требуются библиотеки Oracle OCI, я загрузил эти файлы с веб-сайта Oracle: instantclient-basic-macos.x64-12.2.0.1.0, instantclient-sdk-macos.x64-12.2.0.1.0.zip. Я поместил эти файлы в ~/Library/Caches/Homebrew и установил их с помощью homebrew.

brew install instantclient-basic
brew install instantclient-sdk

На сайте Oracle также упоминалось о необходимости установить некоторые переменные среды, поэтому я поместил это в мой файл.bashrc:

export LD_LIBRARY_PATH=/usr/local/Cellar/instantclient-basiclite/12.2.0.1.0/lib:$LD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/usr/local/Cellar/instantclient-basiclite/12.2.0.1.0/lib:$DYLD_LIBRARY_PATH
export NLS_LANG=UTF8

Но попытка установить ROracle в R приводит к этому:

> install.packages("ROracle")
Installing package into ‘/usr/local/lib/R/3.4/site-library’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/src/contrib/ROracle_1.3-1.tar.gz'
Content type 'application/x-gzip' length 308252 bytes (301 KB)
==================================================
downloaded 301 KB

Warning in strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", tz = tz) :
unknown timezone 'zone/tz/2017c.1.0/zoneinfo/America/Los_Angeles'
* installing *source* package ‘ROracle’ ...
** package ‘ROracle’ successfully unpacked and MD5 sums checked
configure: error: OCI libraries not found
ERROR: configuration failed for package ‘ROracle’
* removing ‘/usr/local/lib/R/3.4/site-library/ROracle’
Warning in install.packages :
  installation of package ‘ROracle’ had non-zero exit status

R говорит, что не может найти библиотеки OCI. До сих пор документация Oracle оказалась несуществующей или бесполезной в решении этой проблемы, но я нашел в Интернете комментарий, который казался многообещающим. Поэтому я написал это в свой.bashrc и запустил его:

R CMD INSTALL --configure-args='--with-oci-lib=/usr/local/Cellar/instantclient-basic/12.2.0.1.0/lib --with-oci-inc=/usr/local/Cellar/instantclient-sdk/12.2.0.1.0/lib/sdk/include' ROracle_1.3-1.tar.gz

С этим результатом:

installing to /usr/local/lib/R/3.4/site-library/ROracle/libs
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
Error: package or namespace load failed for ‘ROracle’ in dyn.load(file, DLLpath = DLLpath, ...):
****unable to load shared object '/usr/local/lib/R/3.4/site-
library/ROracle/libs/ROracle.so':
    dlopen(/usr/local/lib/R/3.4/site-library/ROracle/libs/ROracle.so, 6): Symbol 
    not found: _ons_recvthread_clone_sb
  Referenced from: /usr/local/Cellar/instantclient-basic/12.2.0.1.0/lib/libons.dylib
  Expected in: flat namespace
 in /usr/local/Cellar/instantclient-basic/12.2.0.1.0/lib/libons.dylib
Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/usr/local/lib/R/3.4/site-library/ROracle’

Так что-то не так с libons.dylib? Что я должен делать с этой информацией?

2 ответа

Решение

Instant Client 12.2 для macOS был исправлен. Загрузите его с http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html и разархивируйте, например, в ~/instantclient_12_2

Я смог установить ROracle на MacOS с помощью:

brew install R

Обновите rpath в библиотеке (используя правильный номер версии для R):

install_name_tool -add_rpath ~/instantclient_12_2 /usr/local/Cellar/r/3.4.3/lib/R/bin/exec/R

Запустите "R" и затем:

install.packages("DBI")

Загрузите файл ROracle_1.3-1.tar.gz с веб-сайта https://cran.r-project.org/web/packages/ROracle/index.html и установите его:

R CMD INSTALL --configure-args='--with-oci-lib=/Users/cjones/instantclient_12_2  --with-oci-inc=/Users/cjones/instantclient_12_2/sdk/include' ROracle_1.3-1.tar.gz

Решение для этого без -add_rpath можно найти в пакете Intall ROracle для Windows и Mac OS

Я использую R из Macports, и я сделал:

cd /opt/local/Library/Frameworks/R.framework/Resources/lib
sudo ln -s ~/Applications/instantclient/libclntsh.dylib.12.1
sudo ln -s ~/Applications/instantclient/libclntshcore.dylib.12.1
sudo ln -s libclntsh.dylib.12.1 libclntsh.dylib
sudo ln -s libclntshcore.dylib.12.1 libclntshcore.dylib

Я думаю, что только ссылка на libclntsh.dylib.12.1' is needed. But it does not harm to create the others as well. This way you do not need to runinstall_name_tool` после каждого обновления до R.

После создания ссылок я смог установить ROracle, используя R CMD INSTALL

Другие вопросы по тегам