2011-03-05 24 views

回答

13

幾個小時後發現問題和解決方案。原來其他人都遇到過類似的問題,他們的文章是相當有幫助的:

http://b.atcg.us/blog/2010/04/13/py2app-hell-the-first.html

http://www.vijayp.ca/blog/?p=62

萬一別人運行到這個問題,因爲Python的框架沒有被這個特殊的問題引起的捆綁到應用程序中。您可以通過右鍵單擊您的應用程序來查看軟件包內容,然後進入目錄/框架/來確認。如果Python.framework不存在,它應該是。

請務必下載Python - 我的第一個問題是依賴蘋果公司的Python版本。不要使用這個。你需要安裝你自己的python版本。去http://www.python.org/download/releases/,找到一個版本(我堅持2.6),下載的gzip(不是MAC封裝),並用以下安裝,如果你正在運行雪豹:

./configure --enable-framework MACOSX_DEPLOYMENT_TARGET=10.6 --with-universal-archs=intel --enable-universalsdk=/ 
make 
sudo make install 

調整路徑,安裝軟件包 - 從這裏開始,您需要調整路徑以確保您使用的是自定義安裝版本。從這裏,我重新安裝下面的包 - 這竟然是一個噩夢般的依賴,所以我包括版本號,以及:

  • py2app 0.5.2
  • macholib 1.3
  • modulegraph .8.0

如果這些軟件包真正起作用,那麼您應該可以立即構建並運行您的應用程序。不幸的是,他們沒有。我會稍微介紹這些錯誤和我的黑客解決方案,但是在構建文件中有一些設置需要先做好。

首先setup.py文件應該像個小事端這樣的:

setup.py

from setuptools import setup 

APP = ['Game.py'] 
DATA_FILES = ['data'] 

OPTIONS = { 
    "argv_emulation": False, 
    "compressed" : True, 
    "optimize":2, 
    "iconfile":'data/game.icns',   
} 

setup(
    app=APP, 
    data_files=DATA_FILES, 
    options={'py2app': OPTIONS}, 
) 

則是額外的安全,我用一個shell腳本來調用它。

build.sh

## Remove previous builds. Start with clean slate. 
rm -rf build dist 

## Force python into 32 bit mode. 
export VERSIONER_PYTHON_PREFER_32_BIT=yes 

## Force build with custom installed python 
/Library/Frameworks/Python.framework/Versions/2.6/bin/python setup.py py2app 

運行build.sh應該編譯的應用程序。如果它不編譯,我有好消息 - 這不是你的錯。由於庫毛刺,你可能會碰到以下的部分(或全部):

潛在問題 如果構建腳本失敗,掃描回溯一些以下關鍵字:

pygame找不到 - py2app中的基本路徑問題。添加...

sys.path.insert(0, os.path.join(os.getcwd(), 'lib', 'python2.6','lib-dynload')) ## Added to fix dynlib bug 
import語句後

在py2app LIB boot_app.py

pythonNone - 這似乎是在男子氣包凡不能確定你的Python構建的版本號的錯誤。爲了解決這個問題,我在py2app中添加了以下幾行到build_app.py

## Add these two lines... 
if not info["version"]: 
    info["version"] = "2.6" 
## Before this line. (line 941 in method copy_python_framework() at time of writing) 
pydir = 'python%s'%(info['version']) 

沒有這樣的文件或目錄... Python.framework/[LIB |列入] - py2app僅僅是尋找存在於文件系統樹更深的目錄。轉至Python.framework目錄和符號連接起來的地方...

cd /Library/Frameworks/Python.framework 
sudo ln -s Versions/Current/include/ include 
sudo ln -s Versions/Current/lib lib 

應該這樣做! - 這些步驟創建了一個可在其他intel計算機上工作的編譯應用程序。

+3

+1因爲你給自己寫了一個很好的答案。肯定會有人需要這個。 :) – Donovan 2011-03-06 00:08:45

+0

感謝您的詳細解釋。它幫助我構建了自己的應用程序。 – 2012-07-18 01:51:37

2

感謝您發表您的發現!

我有一個類似的問題。我嘗試了各種你所建議的組合,並且將單個問題隔離爲我在上面確定的boot_app.py中的錯誤。

一旦我將上面確定的boot_app.py添加到單行修復程序中,即使使用預安裝的python版本(版本2.6.1),也能正常工作。

我要指出的是,當我說「一切正常,」我真的是建設一個py2app應用實際分佈,即使用普通的命令:

python setup.py py2app 

「別名」模式。即

python setup.py py2app -A 

其中py2app文檔建議在開發過程中使用,仍然不適用於我(與相同的模塊未找到錯誤)。但更好的實際分配建設工作比什麼都沒有!再次,謝謝。

相關問題