Tato odpověď se bude týkat instalace RODBC a ROracle na OS X, konkrétně na Mavericks a novější.
Oba balíčky je nyní potřeba sestavit (zkompilovat) ze zdroje. To znamená, že první věc, kterou potřebujete, je stáhnout XCode a související „nástroje příkazového řádku“, abyste skutečně měli kompilátor. Způsob, jakým to uděláte, se změnil v podstatě s každou verzí OS X/XCode, ale pokud začnete hledat na Googlu, pravděpodobně skončíte zde.
Jakmile to budete mít na svém místě...
RODBC
Od OS X 10.9 (Mavericks) Apple přestal zahrnovat hlavičkové soubory iODBC SQL spolu s "nástroji příkazového řádku", které jsou uživatelé R v OS X zvyklí instalovat za účelem sestavování Rpackages ze zdroje.
Takže pokud se v tomto okamžiku pokusíte sestavit RODBC ze zdroje na Mavericks, měli byste dostat chybu jako:
configure:error:"Záhlaví ODBC sql.h a sqlext.h nenalezeno"
Chcete-li to vyřešit, musíte si stáhnout nejnovější verzi iODBC (www.iodbc.org) a poté soubor rozbalit a nastavit cestu pro vyhledávání záhlaví a knihovny do umístění, kam jste vložili rozbalený balíček. Pokud nevíte, jak nastavit své vyhledávací cesty, můžete jednoduše umístit hlavičkové soubory (sql.h a sqlext.h) do /usr/include
adresář a libiodbc.a
soubor v /usr/lib
adresář.
Pak byste to měli umět
install.packages("RODBC",type = "source")
bez problémů. Pravděpodobně by to fungovalo také s dalším velkým open source ODBC projektem, unixODBC, také, ale nezkoušel jsem to.
Testoval jsem to (a metodu homebrew v jiné odpovědi) na El Capitan a oba stále fungují.
ROracle
To je složitější. ROracle však lze nainstalovat na OS X (testoval jsem to na Mountain Lion přes El Capitan). Protože ROracle spoléhá na Oracle Instant Client, nejsou pro žádnou platformu dostupné žádné binární soubory. Zde jsou podrobné pokyny k instalaci balíčku.
U OS X se musíme (většinou) řídit pokyny pro Linux.
Nejprve si stáhněte příslušného klienta Oracle Instant Client a také sadu SDK, jak je uvedeno v pokynech pro Linuz.
Pokyny k instalaci Linuxu zmiňují instalaci klienta z RPM, která umístí vše "na správné místo". Nebyl jsem schopen zjistit, zda to platí i pro OS X, takže jsem jednoduše rozbalil klienta v adresáři, který jsem vytvořil, a umístil SDK do tohoto adresáře v /sdk
.
Pokyny k instalaci Linuxu nás pak nasměrují k vytvoření symbolického odkazu na libclntsh.so.11.1. Protože se jedná o OS X, ve skutečnosti se jmenuje libclntsh.dylib.11.1. Potřebujeme tedy cd do adresáře, kde jsme klienta rozbalili, a poté spustit
ln -s libclntsh.dylib.11.1 libclntsh.dylib
Na OS X pak nastavíme DYLD_LIBRARY_PATH
, nikoli LD_LIBRARY_PATH
:
export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH
pomocí jakékoli cesty, která je pro váš počítač správná.
Nikdy se mi nepodařilo přimět ROracle ke kompilaci s OCI_LIB
proměnná prostředí. Místo toho jsem použil --with-oci-lib
možnost příznaku kompilátoru:
R CMD INSTALL --configure-args='--with-oci-lib=/scratch/instantclient_11_2' ROracle_1.1-11.tar.gz
znovu s použitím jakékoli cesty a čísla verze ROracle, která je vhodná.
Pokud se připojujete k databázi Oracle pomocí souboru tnsnames.ora, budete také muset nastavit proměnnou prostředí TNS_ADMIN tak, aby ukazovala na umístění tohoto souboru.
Ještě jedna chyba:můžete zjistit (jako já), že to všechno bude fungovat, pouze pokud spustíte R z příkazového řádku (tj. Terminálu). Konkrétně, pokud spustíte buď RGui.app neboRStudio.app z GUI a poté se pokusíte spustit library(ROracle)
dostanete chybu, když řeknete něco ve smyslu
> 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’
K tomu dojde, i když Sys.getenv("DYLD_LIBRARY_PATH")
věrně hlásí správnou cestu.
Chvíli jsem hackoval „řešení“, kde jsem vytvořil skript shellu, který po spuštění spustil RStudio/RGui a musel jsem si pamatovat, že je vždy následně spouštět přes
open -a R.app
open -a RStudio.app
Problém zřejmě souvisí s tím, jak jsou proměnné prostředí zpřístupňovány aplikacím spouštěným GUI v OS X. Jak už to tak bývá, nakonec jsem řešení našel na StackOverflow. Úprava souboru /etc/launchd.conf
soubor tento problém vyřešil, takže ROracle se nyní načítá, i když je RStudio/RGuiare spuštěno z Finderu. Zde si však všimněte, že /etc/launchd.conf
řešení již není v Yosemite podporováno. Tato odpověď naznačuje, že nyní musíte nastavit spouštěcí soubor plist, abyste nastavili prostředí pro launchctl
při spuštění.
Aktualizace El Capitan pro ROracle
Nyní jsem prošel kelímek na tomto v El Capitan a funguje to, jak je popsáno výše, ale pouze pokud deaktivujete ochranu integrity systému za prvé! Je to poměrně rychlé a pokyny lze snadno najít na Googlu.
Fuj.