2013-05-14 9 views
0

Я создал приложение на Python, которое проверено и отлично работает на моем компьютере (Mac OSX 10.8.3 Python2.7.3 Postgresql9.2.4 Psycopg2-2.5). Приложение скомпилировано с помощью py2app, и я вижу, что сборка успешно включала все пакеты/модули в папку содержимого приложения.Проблемы с развертыванием приложения Psycopg2 Python

Psycopg2 правильно импортирует мою машину, и приложение работает нормально, но когда приложение запускается на другом компьютере (я пробовал 4 разных компьютера ...), он не открывается, и консольное сообщение считывает ImportError: dlopen (/Applications/app.app/Contents/Resources/lib/python2.7/psycopg2/_psycopg.so, 2): библиотека не загружена: libpq.5.dylib

Я искал и модифицировал свой код широко через SO и Google безрезультатно. Ссылки psycopg2 также специально не затрагивают эту проблему. http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/

Я удалил и переустановил psycopg2 & PostGreSQL много раз, строй из источника, MacPorts, самогона и т.д. Моя текущая среда перечисленная выше, с PostgreSQL 9.2.4 с установленным доморощенным и psycopg2-2.5 устанавливается из источника при явно связывая расположение pg_config в setup.cfg

Когда я запускаю otool -l на _psycopg.so, я получаю следующее

/usr/lib/libpq.5.dylib (compatibility version 5.0.0, current version 5.4.0) 
/usr/lib/libssl.0.9.8.dylib (compatibility version 0.9.8, current version 47.0.0) 
/usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 47.0.0) 
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0) 

Как включить мое встроенное приложение (или указать целевой пользователь файлы, если есть) эти файлы? Это правильный подход? Py2app, конечно, не будет включать системные файлы из/usr/lib/в опции «frameworks».

ответ

0

Ваша копия _psycopg.so связана с установкой системы libpq, а не с libpq из сборщика postgresql 9.2.4.

Из-за этого ваше приложение будет работать только в системах под управлением OSX 10.8.

Решение состоит в том, чтобы перестроить psycopg2 и убедиться, что он связан с домашней сборкой PostgreSQL.

Обратите внимание, что py2app не будет копировать файлы из/usr/lib в пакеты приложений, даже если явным образом сказано, что они включают в себя общую библиотеку, поскольку предполагается, что файлы в/usr являются системными файлами, а перераспределение которых в лучшем случае является неудобным w.r.t. лицензии.

+0

Рональд - спасибо за четкую артикуляцию. Я понимаю свою ошибку. Теперь моя сборка приложений включает в себя инфраструктуру libpq и правильно связана с дистрибутируемым. Дополнительные файлы dylib прекрасны, как в/usr/lib – LouisL