2010-06-16 3 views
1

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

Я могу запустить свой скрипт 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 один:/

ответ

0

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

  1. Добавить /opt/local/lib в переменную $LD_LIBRARY_PATH среды при запуске приложения; или
  2. Связать соответствующие библиотеки с файлом .app.
+0

Спасибо. На самом деле мне наконец удалось скомпилировать и запустить все. Чтобы исправить первую проблему «неправильной архитектуры», я обнаружил обходной путь, заменив библиотеки macobobe pyobjc на яблочный, который поставляется с предустановленными os и скомпилирован для разных архитектур (в/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC /) У меня есть скрипт bash, который копирует все в нужное место сразу после создания «.app» с py2app - он отлично работает в этом режиме. – Denis

+1

НЕ редактируйте свой 'LD_LIBRARY_PATH' !! если вы должны сделать что-то подобное ... придерживайтесь '$ DYLD_FALLBACK_LIBRARY_PATH'. Кроме того, малоизвестный 'sudo update_dyld_shared_cache' - это драгоценный камень, иногда такой. –