Ta odpowiedź obejmie instalację RODBC i ROracle na OS X, w szczególności na Mavericks i nowszych.
Oba pakiety muszą teraz zostać zbudowane (skompilowane) ze źródeł. Oznacza to, że pierwszą rzeczą, której potrzebujesz, jest pobranie XCode i powiązanych „narzędzi wiersza poleceń”, aby faktycznie mieć kompilator. Sposób, w jaki to robisz, zmienił się w zasadzie w każdej wersji OS X/XCode, ale jeśli zaczniesz Googling, prawdopodobnie wylądujesz tutaj.
Kiedy już to zrobisz...
RODBC
Od OS X 10.9 (Mavericks) firma Apple przestała dołączać pliki nagłówkowe SQL iODBC wraz z „narzędziami wiersza poleceń”, do których instalacji przyzwyczajeni są użytkownicy R w systemie OS X w celu budowania pakietów R ze źródła.
Więc jeśli spróbujesz zbudować RODBC ze źródeł na Mavericks w tym momencie, powinieneś otrzymać błąd taki jak:
configure:error:"Nie znaleziono nagłówków ODBC sql.h i sqlext.h"
Aby to naprawić, musisz pobrać najnowszą wersję iODBC (www.iodbc.org), a następnie rozpakować plik i ustawić ścieżkę wyszukiwania nagłówka i biblioteki do lokalizacji, w której umieściłeś rozpakowany pakiet. Jeśli nie wiesz, jak ustawić ścieżki wyszukiwania, możesz po prostu umieścić pliki nagłówkowe (sql.h i sqlext.h) w /usr/include
katalog i plik libiodbc.a
plik w /usr/lib
katalog.
Wtedy powinieneś być w stanie to zrobić
install.packages("RODBC",type = "source")
bez żadnych problemów. Przypuszczalnie działałoby to również z innym dużym projektem ODBC typu open source, unixODBC, ale nie próbowałem tego.
Przetestowałem to (i metodę homebrew w innej odpowiedzi) na El Capitan i obie nadal działają.
ROracle
To jest bardziej skomplikowane. Jednak ROracle można zainstalować na OS X (przetestowałem to na Mountain Lion przez El Capitan). Ponieważ ROracle opiera się na Oracle Instant Client, nie ma dostępnych plików binarnych dla żadnej platformy. Tutaj znajdują się szczegółowe instrukcje instalacji pakietu.
W przypadku OS X musimy (w większości) postępować zgodnie z instrukcjami Linuksa.
Najpierw pobierz odpowiedniego klienta Oracle Instant Client, a także pakiet SDK, zgodnie z instrukcjami Linuz.
Instrukcje instalacji Linuksa wspominają o instalacji klienta z RPM, który umieści wszystko „we właściwym miejscu”. Nie byłem w stanie dowiedzieć się, czy dotyczy to OS X, więc po prostu rozpakowałem klienta w utworzonym przez siebie katalogu i umieściłem SDK w tym katalogu w /sdk
.
Instrukcje instalacji Linuksa kierują nas następnie do utworzenia dowiązania symbolicznego dla libclntsh.so.11.1. Ponieważ jest to OS X, w rzeczywistości nazywa się libclntsh.dylib.11.1. Więc musimy przejść do katalogu, w którym rozpakowaliśmy klienta, a następnie uruchomić
ln -s libclntsh.dylib.11.1 libclntsh.dylib
W OS X ustawiamy następnie DYLD_LIBRARY_PATH
, a nie LD_LIBRARY_PATH
:
export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH
używając dowolnej ścieżki, która jest poprawna dla twojego komputera.
Nigdy nie udało mi się skompilować ROracle z OCI_LIB
Zmienna środowiskowa. Zamiast tego użyłem --with-oci-lib
opcja flagi kompilatora:
R CMD INSTALL --configure-args='--with-oci-lib=/scratch/instantclient_11_2' ROracle_1.1-11.tar.gz
ponownie używając odpowiedniej ścieżki i numeru wersji ROracle.
Jeśli łączysz się z bazą danych Oracle za pomocą pliku tnsnames.ora, musisz również ustawić zmienną środowiskową TNS_ADMIN, aby wskazywała lokalizację tego pliku.
Ostatnia uwaga:może się okazać (tak jak ja), że to wszystko zadziała tylko wtedy, gdy uruchomisz R z wiersza poleceń (tj. Terminal). W szczególności, jeśli uruchomisz RGui.app lub RStudio.app z GUI, a następnie spróbujesz uruchomić library(ROracle)
otrzymasz błąd mówiący coś o efekcie
> 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’
Stanie się tak, nawet jeśli Sys.getenv("DYLD_LIBRARY_PATH")
wiernie podaje prawidłową ścieżkę.
Przez jakiś czas zhakowałem „rozwiązanie”, w którym stworzyłem skrypt powłoki, który uruchamiał RStudio/RGui przy starcie, i po prostu musiałem pamiętać, aby zawsze później uruchamiać je za pomocą
open -a R.app
open -a RStudio.app
Problem najwyraźniej ma związek z tym, jak zmienne środowiskowe są udostępniane aplikacjom uruchamianym przez GUI w OS X. Jak to zwykle bywa, w końcu znalazłem to rozwiązanie na StackOverflow. Edycja /etc/launchd.conf
plik rozwiązał ten problem, więc ROracle ładuje się teraz nawet wtedy, gdy RStudio/RGuiare jest uruchamiany z Findera. Pamiętaj jednak, że /etc/launchd.conf
rozwiązanie nie jest już obsługiwane w Yosemite. Ta odpowiedź sugeruje, że musisz teraz skonfigurować startowy plik plist tylko po to, aby ustawić środowisko dla launchctl
podczas uruchamiania.
Aktualizacja El Capitan dla ROracle
Przejrzałem teraz tygiel w El Capitan i działa on tak, jak opisano powyżej, ale tylko wtedy, gdy wyłączysz Ochronę integralności systemu pierwszy! Jest to dość szybkie, a instrukcje można łatwo znaleźć w Google.
Uff.