cx_Oracle: дистрибутивы.ошибки.DistutilsSetupError: не удается найти включаемые файлы Oracle

#linux #oracle #python-2.5 #cx-oracle

#linux #Oracle #python-2.5 #cx-oracle

Вопрос:

Мне нужно установить cx_Oracle для Python 2.5 в Linux (Linux 2.6.18-371.1.2.el5 i686). Я установил клиент Oracle 10.2.0.4.

Я попробовал следующее: 1. Загрузить cx_Oracle tar.gz с http://sourceforge.net/projects/cx-oracle/files/ . Я не знаю, какая из перечисленных версий подходит для python 2.5 и Oracle client 10.2.0.4, поэтому попробуйте cx_Oracle-5.1.tar.gz . Распаковал tar, перейдите в папку unpacked и запустите python setup.py установить. Я получил ошибку:

 Traceback (most recent call last):
File "setup.py", line 187, in <module>
raise DistutilsSetupError("cannot locate Oracle include files")
distutils.errors.DistutilsSetupError: cannot locate Oracle include files
  

В .bash_profile я указал путь oracle:

 export ORACLE_HOME=/usr/oracle/10.2.0.4/client
export PATH=$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
  

Как исправить такую ошибку, может быть, мне нужна другая версия cx_Oracle tar?

  1. Запустите pip для установки cx_Oracle. Получена ошибка:

Загрузка / распаковка cx-Oracle

 Cannot fetch index base URL https://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement cx-Oracle
No distributions at all found for cx-Oracle
  

Может ли кто-нибудь посоветовать мне правильное решение?

Обновить После предложения в ответ я получил следующую ошибку:

 ...
cx_Oracle.c:496: warning: passing argument 3 of âPyModule_AddIntConstantâ makes integer from  pointer without a cast
cx_Oracle.c:497: error: âOCI_UCBTYPE_EXITâ undeclared (first use in this function)
cx_Oracle.c:497: warning: passing argument 3 of âPyModule_AddIntConstantâ makes integer from pointer without a cast
cx_Oracle.c:498: error: âOCI_UCBTYPE_REPLACEâ undeclared (first use in this function)
cx_Oracle.c:498: warning: passing argument 3 of âPyModule_AddIntConstantâ makes integer from pointer without a cast
error: command 'gcc' failed with exit status 1
  

Ответ №1:

При запуске setup.py он проверит наличие любой из этих папок в вашем ORACLE_HOME.

 possibleIncludeDirs = ["rdbms/demo", "rdbms/public", "network/public",
        "sdk/include"]
  

Также клиент instant иногда помещает включаемые файлы, такие как oci.h, в /usr/include/oracle//client, если в каталоге ORACLE_HOME нет каталога ‘include’, создайте символическую ссылку на него.

 sudo ln -s /usr/include/oracle/11.2/client $ORACLE_HOME/include
  

Похоже, вам не хватает клиентского SDK

Комментарии:

1. Я попытался создать символическую ссылку, это не помогает, но я пытаюсь просто добавить пустую папку include в /usr / oracle / 10.2.0.4 / client / network. Эта ошибка исправлена, но я получил новую, подробности см. в обновленном вопросе

2. @khris Попробуйте загрузить sdk и извлечь на своем клиенте, это должно создать папку sdk / include. Я добавил ссылку на ответ.

3. Не могли бы вы, пожалуйста, дать прямую ссылку, потому что на странице клиентского SDK я вижу много вещей, таких как Content Management SDK, и не знаю, что именно мне нужно загрузить. Спасибо

4. Я не могу напрямую ссылаться на файл, перейдите к oracle.com/technetwork/topics/linuxsoft-082809.html и выполните поиск «Пакет Instant Client — SDK: дополнительные заголовочные файлы и пример файла makefile для разработки приложений Oracle с Instant Client» для вашей версии Oracle.

5.Спасибо! Следующие команды помогли мне: sudo mkdir $ORACLE_HOME/sdk/ sudo ln -s /usr/include/oracle/12.1/client $ORACLE_HOME/sdk/include

Ответ №2:

Убедитесь, что вы установили instant client sdk для своей операционной системы.

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

Ответ №3:

  1. Установить oracle_client_basic

     oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
      
  2. С помощью pip install

     python -m pip install cx_Oracle
      
  3. Добавление ldconfig

    1. Найдите местоположение вашего клиента, например: /u01/app/oracle/product/11.2.0/client_1/lib
    2. vi /etc/ld.so.conf.d/oracle.conf

      Добавьте в него это местоположение:

       /u01/app/oracle/product/11.2.0/client_1/lib
        
    3. ldconfig
  4. import cx_oracle

Ответ №4:

Убедитесь, что в вашем path присутствует клиентский sdk.

Также мне пришлось добавить это в мой .bash_rc

 export DYLD_LIBRARY_PATH=$ORACLE_HOME
  

В дополнение к этому, Python 2.7 не поставляется с Python.h, который доступен по умолчанию в Python 3.4. Поэтому я бы также предложил установить пакет python-devel

 yum install python-devel
  

Это должно решить проблему.