Ошибки компиляции py2app, pyObjc и macports

В настоящее время я пишу небольшое приложение на Python, в которое встроены cherrypy и django с использованием py2app. Это работало хорошо, пока я не попытался включить pyobjc в свой проект, поскольку моему приложению требовался небольшой графический интерфейс (который состоит из небольшого значка в верхней строке меню + раскрывающегося меню).

Я могу без проблем запустить свой скрипт на Python (я использую Python 2.6 с macports), но я не могу запустить пакет приложений, сгенерированный py2app. Появится диалоговое окно со следующим сообщением:

ImportError:
dlopen(/Users/denis/tlon/standalone/mac/dist/django_cherry.app/Contents/Resources/lib/python2.6/lib-dynload/CoreFoundation/_inlines.so, 2): no suitable image found.
Did find:
    /Users/denis/tlon/standalone/mac/dist/django_cherry.app/Contents/Resources/lib/python2.6/lib-dynload/CoreFoundation/_inlines.so: mach-o, but wrong architecture

Я сделал быстро:

sudo port -u install py26-pyobjc +universal

но macports почему-то пытается собрать openssl, с которым каждый раз не получается компилировать. Похоже, проблема связана с zLib — вот что появляется в логах:

:info:build ld: warning: in /opt/local/lib/libz.dylib, file is not of required architecture

... И вот вывод file /opt/local/lib/libz.dylib :


    /opt/local/lib/libz.dylib: Mach-O universal binary with 2 architectures
    /opt/local/lib/libz.dylib (for architecture x86_64):    Mach-O 64-bit dynamically linked shared library x86_64
    /opt/local/lib/libz.dylib (for architecture i386):  Mach-O dynamically linked shared library i386

Мне все кажется неправильным.

Я немного застрял здесь. Я даже не понимаю, какое отношение openssl имеет к pyObjc, но, похоже, я никуда не денусь, если не успею его скомпилировать. Macports действительно иногда отстой :/

EDIT Мне удалось решить проблему с Macports, но не с py2app:/


person Denis    schedule 16.06.2010    source источник


Ответы (1)


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

  1. Добавьте /opt/local/lib в переменную окружения $LD_LIBRARY_PATH при запуске приложения; или же
  2. Свяжите соответствующие библиотеки с файлом .app.
person mipadi    schedule 21.06.2010
comment
Спасибо. На самом деле мне наконец удалось скомпилировать и запустить все. Чтобы исправить первую проблему с «неправильной архитектурой», я нашел обходной путь, заменив библиотеки macports pyobjc на библиотеку Apple, которая предустановлена ​​вместе с ОС и скомпилирована для разных архитектур (в /System/Library/Frameworks/Python). .framework/Versions/2.6/Extras/lib/python/PyObjC/) У меня есть bash-скрипт, который копирует все в нужное место сразу после сборки .app с помощью py2app — так он отлично работает. - person Denis; 23.06.2010
comment
НЕ редактируйте свой LD_LIBRARY_PATH!! если вы должны сделать что-то в этом роде... придерживайтесь $DYLD_FALLBACK_LIBRARY_PATH. Кроме того, в такие моменты малоизвестный sudo update_dyld_shared_cache является жемчужиной. - person Alex Gray; 11.09.2011