2010-06-16 50 views
1

我目前正在編寫一個使用py2app嵌入cherrypy和django的小型python應用程序。 它運行良好,直到我試圖在我的項目中包含pyobjc,因爲我的應用程序需要一個小GUI(它由頂部菜單欄+下拉菜單中的小圖標組成)。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的真正有時吸:/

編輯我設法解決MacPorts的問題,但不是py2app之一:/

回答

0

我猜這是因爲所需的庫不在庫路徑,所以裝載器「T弄清楚它在哪裏,因此它可以在鏈接的符號你應該做兩件事情之一:

  1. 啓動應用程序時添加/opt/local/lib$LD_LIBRARY_PATH環境變量;或
  2. 使用.app文件捆綁相應的庫。
+0

謝謝。其實我終於設法編譯並讓所有的東西都運行起來。 爲了解決第一個「錯誤的體系結構」問題,我找到了一個解決方法,用蘋果機替換了macports pyobjc庫,它預裝了os併爲不同的體系結構編譯(在/ System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC /) 我有一個bash腳本,在py2app建立「.app」之後,它將所有東西都複製到正確的位置。 – Denis 2010-06-22 23:54:55

+1

不要編輯你的'LD_LIBRARY_PATH'!如果您必須執行此類操作......請堅持'$ DYLD_FALLBACK_LIBRARY_PATH'。另外,很少有人知道的'sudo update_dyld_shared_cache'是一個寶石,有時是這樣的。 – 2011-09-11 14:34:42