2014-09-17 18 views
6

Jestem trochę zagubiony na tym. Próbowałem również zainstalować starszą wersję cx_Oracle, którą zainstalowałem w oddzielnym virtualenv, ale również zawiedzie w tym samym miejscu z tym samym komunikatem o błędzie.cx_Oracle pip install failed: oci.h: Brak takiego pliku lub katalogu

$ 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

Którykolwiek z nich jest przydatny? https://www.google.co.uk/webhp?q=pip%20UnicodeDecodeError%3A%20%27ascii%27%20codec%20can%27t%20decode%20byte%200xe2%20in%20position%2070%3A%20ordinal% 20nie% 20in% 20range (128) # q = pip + UnicodeDecodeError% 3A + 'ascii' + kodek + nie może + dekodować + bajt + 0xe2 + w + pozycji + 70% 3A + porządkowy + nie + w + zakresie (128) – NPE

+0

czy robisz to polecenie jako sudo? – user1767754

+0

@NPE, dzięki. Wiele z nich wskazuje na pakiet python-devel. Wierzę jednak, że mam to, ponieważ udało mi się zbudować bezbolesne uczucie. – dmvianna

Odpowiedz

12

wpadłem na podobny błąd podczas próby pip zainstalować cx_Oracle, nawet po zainstalowaniu Oracle Instant Client, a po ustawieniu $ ORACLE_HOME i $ LD_LIBRARY_PATH zawierać ścieżkę do klienta.

Wygląda na to, że mógł zostać zainstalowany klient błyskawiczny, ale nie pakiet SDK klienta błyskawicznego. SDK to osobny plik do pobrania/instalacji, a cx_oracle wydaje się wymagać obu, ponieważ brakujące elementy ("oci.h" i cała reszta) znajdują się w SDK.

Jeśli nie masz już tam można znaleźć na stronach Instant Client/SDK pobieranie Oracle tutaj:

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

Zakładając, że masz już pobrać i zainstalować klienta odpowiedniego do swojej platformy, na przykład to jedno:

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

będziesz też musiał pobrać i zainstalować odpowiedni pakiet SDK, na przykład to jedno:

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

Dopóki SDK jest zainstalowany gdzieś na ścieżkach w ORACLE_HOME i LD_LIBRARY_PATH, includes należy rozwiązać .

+1

"Tak długo, jak SDK jest zainstalowany gdzieś na ścieżkach w ORACLE_HOME" był kluczem do mojego problemu. Dzięki – Logic1

0

Jak wyjaśnia bschulz, ten problem jest zwykle rozwiązywany, ustawiając zmienne środowiskowe ORACLE_HOME i LD_LIBRARY_PATH, aby upewnić się, że gcc może uzyskać dostęp do plików nagłówkowych. W moim przypadku to nie rozwiązało problemu, ale sprawdzenie śladu błędu dało mi wskazówkę, aby rozwiązać problem.

Wykonywanie pip zainstalować cx_Oracle pokazał ten błąd:

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. 

Patrząc z flagą -I w człowieku gcc:

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

więc problem był w tych wartości flag

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

Nie mogę powiedzieć, dlaczego flaga -I została ustawiona na te wartości, ale prostym sposobem na jej działanie było zmodyfikowanie Flaga przejściu odpowiednich wartości z linii poleceń pip:

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

ten sposób nowa wartość -I zostanie wysłana do gcc i instalacja kończy się prawidłowo.

0

Od cx_Oracle 6:

  • koła binarne są dostępne na PyPI, tak wielu ludzi nie trzeba skompilować
  • jeśli trzeba kompilować pliki nagłówkowe Oracle nie są potrzebne, i nie powinieneś/nie musisz ustawiać ORACLE_HOME podczas korzystania z klienta błyskawicznego Oracle .

W cx_Oracle 5.2 i 5.3, jeśli używasz RPM Instant Client, nie trzeba ustawić ORACLE_HOME w czasie instalacji i nie trzeba ustawić LD_LIBRARY_PATH przy starcie. Jeśli używasz zamków błyskawicznych klienta (lub prawdziwej instalacji DB $ ORACLE_HOME), możesz ustawić FORCE_RPATH = 1 przed instalacją cx_Oracle. Jeśli to zrobisz, nie będziesz musiał ustawiać LD_LIBRARY_PATH w czasie wykonywania. Ta funkcja była dostępna w cx_Oracle dla kilku wersji.

2

Problem polega na tym, że SDK nie jest obecny, jak wskazuje bschulz. Udało mi się rozwiązać ten problem, wykonując następujące kroki:

  1. pobierane i instalowane/rozpakowane z "instantclient-Basic" i "instantclient-sdk" w $ ORACLE_HOME.

    Można je dostać od here

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

Teraz uruchom pip install cx_Oracle==5.3

ja po nich i to z powodzeniem instalowane 5.3 dla mnie.

Może być konieczne zainstalowanie dodatkowych zależności, wymienionych w Dokumentacji pakietów, które mają zostać pobrane/zainstalowane.

+1

Witaj w [so] i świetnym poście! SO ma dużo świetnego formatowania. Użyj przycisku edycji, aby zobaczyć, jak zmieniłem Twój wpis. – jpaugh

Powiązane problemy