запуск PyUNO в django

У меня есть клиент, использующий SUSE Enterprise Server 11, на котором я хочу использовать проект django с мостом OpenOffice-Python-Bridge под названием PyUNO. Он запускает apache2 с mod_wsgi и не имеет virtualenv или чего-то подобного.

Я добавил соответствующий путь в PYTHONPATH, но когда я запускаю оболочку python manage.py shell и пробую import uno, я получаю эту ошибку:

dynamic module not initialized properly

Это OpenOffice 3.4, python 2.6.x (оба с SUSE-DVD).

Google привел меня к системной переменной LD_LIBRARY_PATH, но как только я ее установил, я больше не могу запустить оболочку, потому что python больше не может найти django (PYTHONPATH, похоже, как-то сломан). Если я запускаю ldconfig -v /path/to/openoffice/program/, что является еще одним распространенным предложением, результат будет таким же.

Выполнив одно из вышеперечисленных действий, я могу запустить общесистемный python и импортировать uno. Но я больше не могу запускать django-shell, потому что django не найден.

Если я сбрасываю LD_LIBRARY_PATH (через unset LD_LIBRARY_PATH или ldconfig), я попадаю в «старую» ситуацию.

OpenOffice поставляется в комплекте с двоичным файлом python. Этот может импортировать uno без ошибки.

Результат: я подумал об использовании другого файла uno.py или как-то указать apache2 использовать версию python, поставляемую с openoffice. Как я могу сделать что-то подобное или добавить соответствующие pyuno-зависимости в версию python, используемую apache? Или какая версия openoffice/pyuno может решить мою проблему? Я бы не хотел касаться mod_wsgi и python из исходников SUSE.

Также могут быть полезны некоторые подсказки о LD_LIBRARY_PATH.


person Marius    schedule 21.06.2013    source источник
comment
Будет ли работать, если вы установите LD_LIBRARY_PATH вместо LD_CONFIG_PATH?   -  person Aya    schedule 25.06.2013
comment
Ах, извините. Это была переменная, которую я уже использовал. Я отредактирую вопрос.   -  person Marius    schedule 25.06.2013
comment
Что ж, если вы можете импортировать модули django, когда LD_LIBRARY_PATH не установлен, то простая установка LD_LIBRARY_PATH не должна приводить к сбою и не должна влиять на PYTHONPATH. Какое точное сообщение об ошибке вы получаете при запуске оболочки django?   -  person Aya    schedule 25.06.2013
comment
Он больше не находит django, если я также добавлю путь django, произойдет сбой при импорте os. Так что это бесполезный способ настроить этот путь. Также не уверен, что импорт uno будет работать после этого...   -  person Marius    schedule 10.07.2013


Ответы (1)


LD_LIBRARY_PATH — это переменная, которая переопределяет путь поиска разделяемых библиотек (обычно .so).

Когда вы устанавливаете его, например, export LD_LIBRARY_PATH=/opt/test/mylibs, вы заставляете все приложения искать общие библиотеки в этом месте.

Это объясняет, почему django-shell не может быть запущен, потому что он ищет библиотеки там, где их нет.

Хорошая новость заключается в том, что в LD_LIBRARY_PATH можно указать несколько путей, разделенных двоеточием (:). Таким образом, вы можете экспортировать LD_LIBRARY_PATH=/opt/test/mylibs:/opt/another/path

Если вам удастся найти, где находятся все нужные вам библиотеки, вы можете добавить их пути в LD_LIBRARY_PATH, и этого может быть достаточно для решения вашей проблемы.

Однако я не знаю, является ли это настоящей проблемой, с которой вы столкнулись, но я думаю, что это может дать вам некоторое ретроспективное представление о значении этой переменной.

person user2492779    schedule 25.06.2013
comment
Ммм, это могло бы мне помочь. По крайней мере, стоит попробовать. Но для этого мне нужен фактический LD_LIBRARY_PATH, чтобы я мог добавить соответствующий путь, не перезаписывая старые записи. Я попытаюсь добавить недостающий путь в /etc/ld.so.conf и перезапустить ldconfig. Надеюсь, это поможет. - person Marius; 27.06.2013
comment
Добавление пути к openoffice/program в /etc/ld.so.conf.d/*.conf не помогло. - person Marius; 10.07.2013