Ответ 1
Этот ответ будет посвящен установке RODBC и ROracle на OS X, в частности, на Mavericks и позже.
Оба пакета теперь должны быть созданы (скомпилированы) из источника. Это означает, что первое, что вам нужно, это загрузить XCode и связанные с ним "средства командной строки", чтобы у вас действительно был компилятор. Как вы это делаете, это изменилось в основном с любой версией OS X/XCode, но если вы запустите Googling, вы, вероятно, столкнетесь с здесь.
Как только у вас будет это на месте...
RODBC
Так как OS X 10.9 (Mavericks) Apple прекратила включать файлы заголовков iODBC SQL вместе с "инструменты командной строки", которые пользователи R на OS X привыкли устанавливать, чтобы построить R пакетов из источника.
Итак, если вы попытаетесь построить RODBC из исходного кода на Mavericks, в этот момент вы должны получить ошибку, например:
configure: ошибка: "Заголовки 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
Это сложнее. Однако ROracle можно установить на OS X (я тестировал это на Mountain Lion через El Capitan). Поскольку ROracle полагается на Oracle Instant Client, для любой платформы. Подробные инструкции по установке для пакета здесь.
Для OS X нам нужно (в основном) следовать инструкциям Linux.
Сначала загрузите соответствующий Oracle Instant Client, а также SDK, как указано в инструкциях Linuz.
В инструкциях по установке 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 подходит.
Если вы подключаетесь к базе данных Oracle с помощью файла tnsnames.ora, вам также понадобится установите переменную среды TNS_ADMIN, чтобы указать на местоположение этого файла.
Один из последних результатов: вы можете найти (как и я), что все это будет работать, только если вы запустите R
из командной строки (т.е. терминала). В частности, если вы запускаете RGui.app или
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")
верно сообщает
правильный путь.
Некоторое время я взломал "решение", где я создал оболочку script, которая была запущена RStudio/RGui при запуске и просто должен был помнить, чтобы всегда запускать их через
open -a R.app
open -a RStudio.app
Проблема, по-видимому, связана с тем, как доступны переменные среды
к графическому интерфейсу, запущенному приложениями в OS X. Как обычно, я в конечном итоге нашел
решение на StackOverflow. Редактирование
Файл /etc/launchd.conf
решил эту проблему, поэтому ROracle теперь загружается, даже когда RStudio/RGui
запускаются из Finder. Хотя обратите внимание на здесь, что решение /etc/launchd.conf
больше не поддерживается в Yosemite. Этот ответ подсказывает, что теперь вам нужно настроить начальный файл plist, чтобы установить среду для launchctl
при запуске.
Обновление El Capitan для ROracle
Теперь я прошел через тигель на этом в El Capitan, и он работает, как описано выше, но только если вы отключите защиту целостности системы. Это довольно быстро, и инструкции легко найти через Google.
Уф.