aka_Jack 04.05.2011 18:31

PythonУстановка модуля cx_Oracle для Python

Однажды понадобилось установить cx_Oracle на Ubuntu 10.04.
В репозитории я пакет не нашел, статьи с готовой инструкцией по установке тоже, поэтому после небольшой компиляции советов написал себе howto, который может будет кому-то полезен

Модуль в исходниках и rpm доступен на http://cx-oracle.sourceforge.net/, качаем RPM для нашей версии (ее можно узнать, набрав в консоли python --version), легким движением конвертируем в deb:
1
2
alien cx_Oracle-5.1-11g-py26-1.i386.rpm 
sudo dpkg -i cx-oracle_5.1-2_i386.deb


Дальше пробуем импорт модуля, вдруг повезет - но нет, скорее всего ничего не выйдет =)
Решение: переложить свежеустановленные библиотеки
1
2
3
4
5
sudo -i
cd /usr/lib/python2.6
mv site-packages/cx_Oracle* dist-packages/
rmdir site-packages/
ln -s dist-packages site-packages


Снова попробуем импорт - теперь ошибка другая:
1
ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory


Это клиентская библиотека, которой у нас нет, ведь у нас не стоит оракл-клиент. Тут нам поможет инструкция.
Скачиваем пакет instantclient-linux-basic (он и содержит нужную нам библиотеку), создадим папку /u01/11gr2/db_1/ (насколько я знаю, она дефолтовая для установки Oracle и будет у нас переменной $ORACLE_HOME), создаем там ссылку (или копируем саму библиотеку). Устанавливаем переменные окружения, говорим системе, где найти новые библиотеки:
1
2
3
4
export ORACLE_HOME=[your installation path]/instantclient_11_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
sudo gedit /etc/ld.so.conf.d/oracle.conf
sudo ldconfig


Теперь модуль подключается, на всякий случай в скрипте делаем
1
2
3
#set system environment
import os
os.putenv("ORACLE_HOME","/u01/11gr2/db_1/")




Тэги: cx_Oracle Oracle python
+ 9 -
Похожие Поделиться

lwilis 09.05.2011 11:12 #
Добавь теги.
zealotous 13.01.2012 19:57 #
В Debian Wheezy не работает метод.
Выдает ошибку:
1
2
3
4
5
6
7
Python 2.7.2+ (default, Dec  1 2011, 01:55:02) 
[GCC 4.6.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /usr/lib/python2.7/dist-packages/cx_Oracle.so: undefined symbol: PyUnicodeUCS2_AsEncodedString



Похоже что-то выпилили или наоборот запили в Python 2.7.2
aka_Jack 25.04.2012 16:42 #
давно тут не был.

Интернеты говорят, что возможно ваша установка использует формат юникода (ucs4), а модуль cx_Oracle 5.1 - ucs2 (как в ошибке). Вроде лечится новой версией cx_Oracle 5.4.

Пруфлинк.

Если еще доберусь до стенда, попробую с новой версией.