Instalação de pacotes RODBC / ROracle no OS X Mavericks

Eu tenho tentado instalar alguns pacotes como RODBC, ROracle ou RGtk2 – usado para chocalho. Eu realmente apreciaria se alguém pudesse me ajudar a contornar este problema para que eu pudesse usar esses aplicativos em um Mac com mavericks e com 3.1.1 R

Eu recebo este tipo de erro para ambos RODBC e RGtk2:

pacote ‘RGtk2’ está disponível como um pacote fonte mas não como um aviso binário em install.packages: o pacote ‘RGtk2’ não está disponível (para R versão 3.1.1)

Quando tento usar type = ‘source’, posso fazer o download ou começar a baixar, mas depois recebo esse tipo de mensagem de erro …

Aviso em install.packages: a instalação do pacote ‘RODBC’ teve status de saída diferente de zero

Esta resposta vai cobrir a instalação do RODBC e do ROracle no OS X, especificamente no Mavericks e mais tarde.

Ambos os pacotes precisam ser compilados (compilados) a partir da fonte. Isso significa que a primeira coisa que você precisa é baixar o XCode e as “ferramentas de linha de comando” associadas para que você tenha um compilador. Como você faz isso mudou com basicamente todas as versões do OS X / XCode, mas se você iniciar o Googling você provavelmente terminará aqui .

Depois de ter isso no lugar …

RODBC

Desde o OS X 10.9 (Mavericks), a Apple parou de include os arquivos de header SQL iODBC junto com as “ferramentas de linha de comando” que os usuários R estão instalando para construir pacotes R a partir do código-fonte.

Portanto, se você tentar criar o RODBC a partir do código-fonte no Mavericks, neste ponto, você deverá receber um erro como:

configure: erro: “headers ODBC sql.heo sqlext.h não foram encontrados”

Para corrigir isso, você precisa baixar a versão mais recente do iODBC (www.iodbc.org) e, em seguida, descompactar o arquivo e definir seus caminhos de pesquisa de header e biblioteca para o local onde você colocou o pacote descompactado. Se você não souber como definir seus caminhos de busca, basta colocar os arquivos de header (sql.h e sqlext.h) no /usr/include e o arquivo libiodbc.a no /usr/lib .

Então você deveria ser capaz de fazer

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

sem quaisquer problemas. Presumivelmente, isso também funcionaria com o outro projeto ODBC de código-fonte aberto, unixODBC, mas eu não tentei isso.

Eu testei isso (e o método homebrew em outra resposta) no El Capitan e ambos ainda funcionam.

Roçar

Isso é mais complicado. No entanto, o ROracle pode ser instalado no OS X (testei isso no Mountain Lion por meio do El Capitan). Como o ROracle conta com o Oracle Instant Client, não há binários disponíveis para nenhuma plataforma. Existem instruções de instalação detalhadas para o pacote aqui .

Para o OS X, precisamos seguir (principalmente) as instruções do Linux.

Primeiro, baixe o Oracle Instant Client apropriado, assim como o SDK, conforme as instruções da Linuz.

As instruções de instalação do Linux mencionam a instalação do cliente a partir de um RPM, que colocará tudo “no lugar certo”. Eu não era capaz de descobrir se isso se aplicava ao OS X, então eu simplesmente descompactei o cliente em um diretório que eu criei e coloquei o SDK dentro desse diretório em /sdk .

As instruções de instalação do Linux nos direcionam para criar um link simbólico para libclntsh.so.11.1. Como este é o OS X, ele é chamado de libclntsh.dylib.11.1. Então precisamos cd para o diretório onde nós descompactamos o cliente e então rodamos

 ln -s libclntsh.dylib.11.1 libclntsh.dylib 

No OS X, nós definimos o DYLD_LIBRARY_PATH , não o LD_LIBRARY_PATH :

 export DYLD_LIBRARY_PATH=/scratch/instantclient_11_2:$DYLD_LIBRARY_PATH 

usando qualquer caminho correto para sua máquina.

Eu nunca consegui fazer o ROracle compilar com uma variável de ambiente OCI_LIB . Em vez disso, usei a opção de sinalizador do compilador --with-oci-lib :

 R CMD INSTALL --configure-args='--with-oci-lib=/scratch/instantclient_11_2' ROracle_1.1-11.tar.gz 

novamente usando qualquer caminho e o número da versão do ROracle é apropriado.

Se você estiver se conectando a um database Oracle usando um arquivo tnsnames.ora, também precisará definir uma variável de ambiente TNS_ADMIN para apontar para o local desse arquivo.

Uma última pegadinha: você pode achar (como eu) que tudo isso funcionará apenas se você iniciar o R ​​a partir da linha de comando (isto é, Terminal). Especificamente, se você iniciar o RGui.app ou RStudio.app a partir da GUI e tentar executar a library(ROracle) , receberá um erro dizendo algo sobre o efeito de

 > 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' 

Isso acontecerá mesmo que Sys.getenv("DYLD_LIBRARY_PATH") relate fielmente o caminho correto.

Por um tempo, eu hackeei uma “solução” onde eu criei um shell script que lançou o RStudio / RGui na boot, e só tinha que lembrar de lançá-los subseqüentemente via

 open -a R.app open -a RStudio.app 

O problema aparentemente tem a ver com a forma como variables ​​de ambiente são disponibilizadas para aplicativos iniciados por GUI no OS X. Como é geralmente o caso, eu finalmente encontrei a solução no StackOverflow . A edição do arquivo /etc/launchd.conf resolveu esse problema, portanto o ROracle agora é carregado mesmo quando o RStudio / RGui é iniciado a partir do Finder. Embora observe aqui que a solução /etc/launchd.conf não é mais suportada no Yosemite. Essa resposta sugere que você agora precisa configurar um arquivo plist de boot apenas para definir o ambiente para launchctl na boot.

Atualização de El Capitan para ROracle

Eu agora passei pelo crisol em El Capitan e funciona como descrito acima, mas somente se você desativar a proteção de integridade do sistema primeiro! Isso é bastante rápido e as instruções são facilmente encontradas pelo Google.

Ufa

Se você tem homebrew, seria fácil. No terminal, use

 brew install unixodbc 

Em r console, use

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

Espero que ajude

Se você estiver usando o MacPorts, faça o seguinte:

 sudo port install unixODBC 

Em seguida, crie (ou, se existir, edite) um arquivo em seu diretório pessoal

 ~/.R/Makevars 

que deve conter uma linha

 CFLAGS += -I/opt/local/include 

Então, você pode instalar o RODBC

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

Basicamente, o acima

  • Instala as bibliotecas e os arquivos de header necessários
  • Diz R onde encontrá-los
  • Instala o RODBC.

Você terá que construir o pacote da fonte à mão. Se você for ao site do RODBC , notará que os binários não estão disponíveis para o Mavericks. Baixe o pacote e siga as instruções para criar um pacote a partir da fonte. Estas são as instruções do Windows, mas a ideia geral é a mesma. Você precisará de todos os pacotes de SO necessários que estão sendo usados ​​durante o processo de compilation de um pacote específico.