Установка пакетов RODBC/ROracle на OS X Mavericks
Я пытался установить некоторые пакеты, такие как RODBC, ROracle или RGtk2 - используемые для трещотки. Я был бы очень признателен, если бы кто-нибудь помог мне обойти эту проблему, чтобы я мог использовать эти приложения на Mac с Mavericks и с 3.1.1 R
Я получаю такую ошибку как для RODBC, так и для RGtk2:
Пакет 'RGtk2' доступен как исходный пакет, но не как двоичный. Предупреждение в install.packages: пакет 'RGtk2' недоступен (для версии R 3.1.1)
Когда я пытаюсь использовать type='source', я могу загрузить или начать загрузку, но затем я получаю сообщение об ошибке такого рода...
Предупреждение в install.packages: установка пакета 'RODBC' имела ненулевой статус выхода
4 ответа
Этот ответ будет касаться установки 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: error: "Заголовки 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. Итак, нам нужно перейти в каталог, в который мы разархивировали клиента, а затем запустить
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")
добросовестно сообщает правильный путь.
Некоторое время я собирал "решение", в котором я создал сценарий оболочки, который запускал RStudio/RGui при запуске, и просто должен был помнить, чтобы всегда впоследствии запускать их через
open -a R.app
open -a RStudio.app
Очевидно, что проблема связана с тем, как переменные среды становятся доступными для приложений, запускаемых с помощью графического интерфейса в OS X. Как обычно, я в конечном итоге нашел решение на Stackru. Редактирование /etc/launchd.conf
Файл решил эту проблему, поэтому ROracle теперь загружается даже при запуске RStudio/RGui из Finder. Хотя обратите внимание, что здесь /etc/launchd.conf
Решение больше не поддерживается в Yosemite. Этот ответ предполагает, что теперь вам нужно настроить стартовый файл plist, чтобы настроить среду для launchctl
на старте.
Эль Капитан Обновление для ROracle
Сейчас я прошел через этот тигель в Эль-Капитане, и он работает, как описано выше, но только если вы сначала отключите защиту целостности системы! Делать это довольно быстро, и инструкции легко найти через Google.
Уф.
Если бы вы получили доморощенный, это было бы легко. В терминале используйте
brew install unixodbc
В консоли r используйте
install.packages("RODBC",type="source")
Надеюсь, это поможет
Если вы используете MacPorts, сделайте это:
sudo port install unixODBC
Затем создайте (или, если он существует, отредактируйте) файл в вашем домашнем каталоге
~/.R/Makevars
который должен содержать строку
CFLAGS += -I/opt/local/include
Затем вы можете установить RODBC
install.packages("RODBC",type="source")
В основном, выше
- Устанавливает необходимые библиотеки и заголовочные файлы
- Сообщает R, где их найти
- Устанавливает RODBC.
Вам нужно будет собрать пакет из исходного кода вручную. Если вы зайдете на сайт RODBC, вы заметите, что двоичные файлы не доступны для Mavericks. Загрузите пакет и следуйте инструкции по сборке пакета из исходного кода. Это инструкции для Windows, но общая идея та же. Вам понадобятся все необходимые пакеты ОС, которые используются во время процесса сборки конкретного пакета.