Подтвердить что ты не робот

Установка пакетов RODBC/ROracle на OS X Mavericks

Я пытаюсь установить некоторые пакеты, такие как RODBC, ROracle или RGtk2 - используется для погремушки. Я был бы очень признателен, если бы кто-то помог мне решить эту проблему, чтобы я мог использовать эти приложения на Mac с mavericks и с 3.1.1 R

Я получаю такую ​​ошибку как для RODBC, так и для RGtk2:

package 'RGtk2 доступен как исходный пакет, но не как двоичный Предупреждение в install.packages: пакет 'RGtk2 недоступен (для R версии 3.1.1)

Когда я пытаюсь использовать type = 'source', я могу загрузить или начать загрузку, но затем я получаю такое сообщение об ошибке...

Предупреждение в папке install.packages: установка пакета "RODBC имеет статус отсутствия нулевого статуса

4b9b3361

Ответ 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.

Уф.

Ответ 2

Если бы вы получили доморощенный, это было бы легко. В терминале используйте

brew install unixodbc

В консоли r используйте

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

Надеюсь, что это поможет

Ответ 3

Если вы используете MacPorts, сделайте следующее:

sudo port install unixODBC

Затем создайте (или, если он существует, отредактируйте) файл в своем домашнем каталоге

~/.R/Makevars

который должен содержать строку

CFLAGS += -I/opt/local/include

Затем вы можете установить RODBC с помощью

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

В основном, выше

  • Устанавливает необходимые библиотеки и файлы заголовков
  • Сообщает R, где их можно найти
  • Устанавливает RODBC.

Ответ 4

Вам придется собрать пакет из исходного кода. Если вы перейдете на сайт RODBC, вы заметите, что двоичные файлы недоступны для Mavericks. Загрузите пакет и следуйте инструкциям по созданию пакета из источника. Это инструкции Windows, но общая идея такая же. Вам понадобятся все необходимые пакеты ОС, которые используются во время процесса сборки определенного пакета.