2014-09-17 4 views
6

Ich bin ein bisschen auf diesem verloren. Ich habe auch versucht, eine ältere Version von cx_Oracle zu installieren, die ich in einem separaten virtualenv installiert habe, aber es schlägt auch an der gleichen Stelle mit der gleichen Fehlermeldung fehl.Cx_Oracle Pip-Installation schlägt fehl: oci.h: Keine solche Datei oder Verzeichnis

$ 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

Irgendwelche von irgendwelchen von irgendwelchen Gebrauch? 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% 20in% 20range (128) # q = pip + UnicodeDecodeError% 3A + 'ascii' + Codec + kann nicht + + + Byte + 0xe2 + in + Position + 70% 3A + ordinal + nicht + in + Bereich (128) dekodieren – NPE

+0

machst du diesen Befehl als sudo? – user1767754

+0

@ NPE, danke. Viele davon verweisen auf das Paket python-devel. Allerdings glaube ich, dass ich es habe, da ich in der Lage war, ohne Probleme zu bauen. – dmvianna

Antwort

12

ich in einen ähnlichen Fehler lief versucht cx_Oracle pip installieren, auch nach Oracle Instant-Client installieren und nach LD_LIBRARY_PATH $ ORACLE_HOME und $ Setzen Sie den Pfad zu dem Client aufzunehmen.

Es klingt, als ob Sie den Instant Client, aber nicht das Instant Client SDK installiert haben. Das SDK ist ein separater Download/Installation, und cx_oracle scheint beides zu benötigen, da sich die fehlenden Includes ('oci.h' und alle anderen) im SDK befinden.

Wenn Sie bereits nicht dort gewesen, können Sie die Oracle Instant Client/SDK-Download-Seiten finden Sie hier:

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

Unter der Annahme, dass Sie bereits heruntergeladen und installiert den Client entsprechend Ihrer Plattform, zum Beispiel diese:

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

Sie auch das entsprechende SDK herunterladen und installieren müssen, z.B. diese:

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

Solange das SDK irgendwo auf den Pfaden in ORACLE_HOME und LD_LIBRARY_PATH installiert ist, sollte das umfasst lösen .

+1

"Solange das SDK irgendwo auf den Pfaden in ORACLE_HOME installiert ist" war der Schlüssel zu meinem Problem. Danke – Logic1

0

Wie Bschulz erklärt, wird dieses Problem normalerweise behoben, indem Umgebungsvariablen ORACLE_HOME und LD_LIBRARY_PATH gesetzt werden, um sicherzustellen, dass gcc auf Headerdateien zugreifen kann. In meinem Fall löste es das Problem nicht, aber die Überprüfung der Fehlerspur gab mir den Hinweis, das Problem zu lösen.

zeigte pip installieren Ausführen cx_Oracle diese Fehler:

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

So ist das Problem in diesem Flag-Wert war:

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

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. 

den -I-Flag im Menschen gcc Nachschlagen

Ich kann nicht wirklich sagen, warum die -I-Flag auf diese Werte gesetzt wurde, aber der einfache Weg, um es zum Laufen zu bringen, war das Ändern der Flagge, die richtigen Werte von pip Befehlszeile übergeben:

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

diese Weise ein neuer -I-Wert auf gcc und die Installation beendet korrekt gesendet.

0

Von cx_Oracle 6:

  • binäre Räder auf PyPI verfügbar sind, so viele Menschen zu brauchen nicht
  • kompilieren, wenn Sie kompilieren müssen, die Oracle-Header-Dateien sind nicht benötigt, und Sie sollten ORACLE_HOME nicht setzen/müssen, wenn Sie Oracle Instant Client verwenden.

In cx_Oracle 5.2 und 5.3, wenn Sie die Instant Client RPMs verwenden, brauchen Sie nicht ORACLE_HOME Zeit bei der Installation zu setzen, und Sie brauchen nicht LD_LIBRARY_PATH zur Laufzeit festgelegt. Wenn Sie Instant Client-Zips verwenden (oder eine echte Installation von DB $ ORACLE_HOME), können Sie vor der Installation von cx_Oracle FORCE_RPATH = 1 festlegen. Wenn Sie dies tun, müssen Sie LD_LIBRARY_PATH zur Laufzeit nicht setzen. Diese Funktion wurde für einige Versionen in cx_Oracle verwendet.

2

Das Problem ist mit SDK nicht vorhanden, wie von bschulz angegeben. Ich war in der Lage, das Problem zu beheben, indem Sie die folgenden Schritte:

  1. heruntergeladen und installiert/den „instant-basic“ und „instant-sdk“ in $ ORACLE_HOME dekomprimiert hat.

    Sie können sie erhalten von here

  2. -Setup die /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 
    

Jetzt pip install cx_Oracle==5.3

ich diese gefolgt laufen und es erfolgreich installiert 5.3 für mich.

Möglicherweise müssen Sie einige zusätzliche Abhängigkeiten installieren, wie in der Dokumentation der Pakete aufgeführt, die Sie herunterladen/installieren möchten.

+1

Willkommen bei [so], und tolle Post! SO hat eine Menge toller Formatierung zur Verfügung. Verwenden Sie die Bearbeitungsschaltfläche, um zu sehen, wie ich Ihren Beitrag geändert habe. – jpaugh