2014-09-17 10 views
6

Sono un po 'perso su questo. Ho anche provato a installare una versione precedente di cx_Oracle, che ho installato in una virtualenv separata, ma non riesce nello stesso posto con lo stesso messaggio di errore.cx_Oracle pip installation fallisce: oci.h: Nessun file o directory

$ pip install cx_Oracle 
(...) 

cx_Oracle.c:10:17: error: oci.h: No such file or directory 
cx_Oracle.c:11:18: error: orid.h: No such file or directory 
cx_Oracle.c:12:16: error: xa.h: No such file or directory 

error: command 'gcc' failed with exit status 1 
(...) 
---------------------------------------- 
Cleaning up... 
Command /R/.virtualenv/myenv/bin/python -c "import setuptools, tokenize;__file__='/R/.virtualenv/myenv/build/cx-Oracle/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-g5eyNG-record/install-record.txt --single-version-externally-managed --compile --install-headers /R/.virtualenv/myenv/include/site/python2.7 failed with error code 1 in /R/.virtualenv/myenv/build/cx-Oracle 
Traceback (most recent call last): 
    File "/R/.virtualenv/myenv/bin/pip", line 11, in <module> 
    sys.exit(main()) 
    File "/R/.virtualenv/myenv/lib/python2.7/site-packages/pip/__init__.py", line 185, in main 
    return command.main(cmd_args) 
    File "/R/.virtualenv/myenv/lib/python2.7/site-packages/pip/basecommand.py", line 161, in main 
    text = '\n'.join(complete_log) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 70: ordinal not in range(128) 

full error log

+0

Qualcuno di questi usi? https://www.google.co.uk/webhp?q=pip%20UnicodeDecodeError%3A%20%27ascii%27%20codec%20can%27t%20decode%20byte%200xe2%20in%20position%2070%3A%20ordinal% 20not%% 20range 20in (128) # q = pip + UnicodeDecodeError% 3A + 'ascii' + codec + non può + decoder + byte + 0xE2 + in + posizione + 70% 3A + ordinale + non + a + intervallo (128) – NPE

+0

stai facendo questo comando come sudo? – user1767754

+0

@NPE, grazie. Molti di questi puntano al pacchetto python-devel. Tuttavia, credo di averlo, dato che sono stato in grado di costruire Numpy senza intoppi. – dmvianna

risposta

12

mi sono imbattuto in un errore simile tentativo di pip installazione cx_Oracle, anche dopo l'installazione di Oracle Instant Client, e dopo aver impostato $ ORACLE_HOME e $ LD_LIBRARY_PATH per includere il percorso al cliente.

Sembra che sia stato installato il client istantaneo, ma non l'SDK di client istantanei. L'SDK è un download/installazione separato e cx_oracle sembra aver bisogno di entrambi, poiché l'include mancante ("oci.h" e tutto il resto) si trovano nell'SDK.

Se non l'hai già stato lì, è possibile trovare i Oracle Instant Client/SDK scaricare pagine qui:

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

Supponendo che hai già scaricato e installato il client appropriato per la propria piattaforma, per esempio questo:

oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.zip

avrete anche bisogno di scaricare e installare il relativo SDK, ad esempio, questo:

oracle-instantclient11.2-sdk-11.2.0.1.0-1.x86_64.zip

Finché l'SDK è installato da qualche parte sui sentieri in ORACLE_HOME e LD_LIBRARY_PATH, la include dovrebbe risolvere .

+1

"Finché l'SDK è installato da qualche parte sui percorsi in ORACLE_HOME" era la chiave del mio problema. Grazie – Logic1

0

Come spiega bschulz, questo problema viene in genere risolto impostando le variabili di ambiente ORACLE_HOME e LD_LIBRARY_PATH per assicurarsi che gcc possa accedere ai file di intestazione. Nel mio caso non ha risolto il problema, ma l'ispezione della traccia dell'errore mi ha dato l'indizio per risolvere il problema.

Esecuzione pip installare cx_Oracle mostrato questo errore:

gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/home/oracle/product/12.1.0/rdbms/demo -I/home/oracle/product/12.1.0/rdbms/public -I/usr/include/python2.7 -c cx_Oracle.c -o build/temp.linux-x86_64-2.7-12c/cx_Oracle.o -DBUILD_VERSION=5.2.1 
cx_Oracle.c:10:17: error: oci.h: No such file or directory 
cx_Oracle.c:11:18: error: orid.h: No such file or directory 
cx_Oracle.c:27:2: error: #error Unsupported version of OCI. 

Alzando bandiera -I nell'uomo gcc:

-I dir Add the directory dir to the list of directories to be searched for header files. .... 

Quindi il problema è stato in questi valori bandiera:

-I/home/oracle/product/12.1.0/rdbms/demo 
-I/home/oracle/product/12.1.0/rdbms/public 
-I/usr/include/python2.7 

Non riesco davvero a capire perché il flag -I sia stato impostato su quei valori, ma il modo più semplice per farlo funzionare era modificare il flag che trasmette i valori corretti dalla riga di comando pip:

pip install cx_Oracle --global-option=build_ext --global-option="-I/home/oracle/instantclient_12_1/sdk/include" 

In questo modo, un nuovo valore -I viene inviato a gcc e l'installazione termina correttamente.

0

Da cx_Oracle 6:

  • ruote binari sono disponibili su PyPI, così tante persone non hanno bisogno di compilare
  • se si ha bisogno per la compilazione, i file di intestazione di Oracle non sono necessario, e non è necessario/necessario impostare ORACLE_HOME quando si utilizza il client istantaneo Oracle .

In cx_Oracle 5.2 e 5.3, se si utilizzano gli RPM Instant Client, non è necessario impostare ORACLE_HOME al momento dell'installazione, e non è necessario impostare LD_LIBRARY_PATH in fase di esecuzione. Se si utilizzano le cerniere del client istantaneo (o un'installazione DB $ ORACLE_HOME reale), è possibile impostare FORCE_RPATH = 1 prima di installare cx_Oracle. Se si esegue questa operazione, non sarà necessario impostare LD_LIBRARY_PATH in fase di runtime. Questa funzione è stata in cx_Oracle per alcune versioni.

2

Il problema è con SDK non presente come sottolineato da bschulz. Sono stato in grado di risolvere il problema seguendo questi passaggi:

  1. scaricato e installato/decompresso il "instantclient-base" e "instantclient-sdk" in $ ORACLE_HOME.

    Si possono ottenere da here

  2. Setup il /etc/environment

    export ORACLE_HOME=/opt/oracle/instantclient_12_2 
    export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2 
    cd $ORACLE_HOME 
    unzip /sdk/ottclasses.zip 
    cp -R ./sdk/* . 
    cp -R ./sdk/include/* . 
    ln -s libclntsh.so.12.1 libclntsh.so 
    ln -s libocci.so.12.1 libocci.so 
    

Ora eseguire pip install cx_Oracle==5.3

ho seguito questi ed installato con successo 5.3 per me.

Potrebbe essere necessario installare alcune dipendenze aggiuntive come elencato nella documentazione dei pacchetti che si suppone di scaricare/installare.

+1

Benvenuto in [così] e ottimo post! SO ha un sacco di grande formattazione disponibile. Usa il pulsante Modifica per vedere come ho cambiato il tuo post. – jpaugh