сбой установки CX Oracle pip: oci.ч: нет такого файла или каталога
Я немного потерялся в этом. Я также попытался установить более старую версию cx_Oracle, которую я установил в отдельном virtualenv, но она также терпит неудачу в том же месте с тем же сообщением об ошибке.
$ 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('rn', '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)
4 ответов
Я столкнулся с аналогичной ошибкой, пытаясь pip установить cx_oracle, даже после установки Oracle instant client и после установки $ORACLE_HOME и $LD_LIBRARY_PATH для включения пути к клиенту.
похоже, что вы могли установить мгновенный клиент, но не мгновенный клиент SDK. SDK-это отдельная загрузка / установка, и cx_oracle, похоже, нуждается в обоих, поскольку отсутствует ('oci.ч и все остальные) находятся в SDK.
Если у вас нет уже там, вы можете найти страницы загрузки Oracle Instant Client / SDK здесь:
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
предполагая, что вы уже загрузили и установили клиент, соответствующие вашей платформе, например это:
oracle-instantclient11.2-basic-11.2.0.1.0-1.архитектуру x86_64.zip
вам также необходимо загрузить и установить соответствующий SDK, например один:
oracle-instantclient11.2-sdk-11.2.0.1.0-1.архитектуру x86_64.zip
пока SDK установлен где-то на путях в ORACLE_HOME и LD_LIBRARY_PATH, includes должны разрешаться.
проблема с SDK нету как отметил bschulz. Я смог исправить эту проблему, выполнив следующие шаги:
-
скачал и установил/распаковал "instantclient-basic" и "instantclient-sdk" в $ORACLE_HOME.
вы можете получить их из здесь
-
настройки
/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
Теперь бегите pip install cx_Oracle==5.3
Я следил за этим и успешно установлен 5.3 для меня.
возможно, Вам потребуется установить некоторые дополнительные зависимости, перечисленные в документации пакетов, которые вы должны загрузить / установить.
как объясняет bschulz, эта проблема обычно решается установкой переменных среды ORACLE_HOME и LD_LIBRARY_PATH, чтобы убедиться, что gcc может получить доступ к файлам заголовков. В моем случае это не решило проблему, но проверка трассировки ошибок дала мне подсказку, чтобы решить проблему.
выполнение pip install cx_Oracle показало эту ошибку:
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.
глядя вверх-я флаг в man gcc:
-I dir Add the directory dir to the list of directories to be searched for header files. ....
Итак, проблема была в этом флаге значения:
-I/home/oracle/product/12.1.0/rdbms/demo
-I/home/oracle/product/12.1.0/rdbms/public
-I/usr/include/python2.7
Я не могу сказать, почему флаг-I был установлен на эти значения, но простой способ заставить его работать - изменить флаг, передающий правильные значения из командной строки pip:
pip install cx_Oracle --global-option=build_ext --global-option="-I/home/oracle/instantclient_12_1/sdk/include"
таким образом, новое значение-I отправляется в gcc, и установка заканчивается правильно.
из cx_Oracle 6:
- бинарные колеса доступны на PyPI, поэтому многим людям не нужно compile
- Если вам нужно скомпилировать, заголовочные файлы Oracle не являются необходимо, и вы не должны/не должны устанавливать ORACLE_HOME при использовании Oracle Мгновенный Клиент.
в cx_Oracle 5.2 и 5.3, если вы используете мгновенные клиентские RPMs, вам не нужно устанавливать ORACLE_HOME во время установки, и вам не нужно устанавливать LD_LIBRARY_PATH во время выполнения. Если вы используете Мгновенные клиентские молнии (или реальная установка DB $ORACLE_HOME), вы можете установить FORCE_RPATH=1 Перед установкой cx_Oracle. Если вы это сделаете, вам не нужно будет устанавливать LD_LIBRARY_PATH во время выполнения. Эта функция была в cx_Oracle для нескольких версий.