LINUX.ORG.RU

python: как правильно подгрузить cx_Oracle модуль


0

0

Привет,

может проблема надуманная, короче пишу программку, которая читает конфиг и потом грузит все, в соотвествии с прочитанными настройками и в частности cx_Oracle модуль, который динамически грузит оракловскую библиотеку.

В перле, я делая тоже самое в скрипте писал

$ENV{ORACLE_HOME} = "/opt/oracle/11";
$ENV{LD_LIBRARY_PATH} = $ENV{ORACLE_HOME}."/lib";

и потом грузил модуль

а в питоне такое не проходит

Делаю

os.environ["ORACLE_HOME"] = oracle_home
os.environ["LD_LIBRARY_PATH"] = "%s/lib" % (oracle_home)
os.environ["PATH"] = "%s:%s/bin" % (os.environ["PATH"],oracle_home)

и потом

import cx_Oracle as ora

и получаю ошибку, что динамическая библиотека не найдена

Если теже переменные окружения посажу до того как стартую питон - все срабатывает и cx_Oracle грузится.

Как сделать правильно? Можно и глобально настроить LD_LIBRARY_PATH просто не хотелось бы выносить кофигурацию ORACLE за пределы остальных конфигов, так как могут сразу две, разных верий oracle использоваться. Опять же поди придется и несколько cx_Oracle в таком случае компилять

Есть мнение, что ld-linux.so после загрузки питона плевать на изменение переменной LD_LIBRARY_PATH.

Установка всех этих оракловских переменных окружения лучше всего делается в .profile или /etc/profile.

anonymous
()
Ответ на: комментарий от anonymous

но в перле-то у человека работало :) Я думаю надо копать strace почему именно модуль не находится. Возможно, он находится но не подгружается.

Я бы сделал вот такую замену:
-os.environ["LD_LIBRARY_PATH"] = "%s/lib" % (oracle_home)
+os.environ["LD_LIBRARY_PATH"] = "%s/lib:" % (oracle_home) + os.environ["LD_LIBRARY_PATH"]

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Виноват, каюсь. perl тоже не работает. Видимо загрузчик сам ишет библиотеку в том месте, где она была на момент компиляцие перлового модуля. Типа того.

the_moon
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.