嘗試在Mac上使用py2app構建應用程序。讓我的機器上的一切工作正常,但是當將應用程序移動到另一個時,它崩潰並且控制檯顯示此錯誤。py2app構建的應用程序在其他機器上顯示`ERROR:pygame.macosx import FAILED`
ERROR: pygame.macosx import FAILED
任何人有一個解決的辦法?
嘗試在Mac上使用py2app構建應用程序。讓我的機器上的一切工作正常,但是當將應用程序移動到另一個時,它崩潰並且控制檯顯示此錯誤。py2app構建的應用程序在其他機器上顯示`ERROR:pygame.macosx import FAILED`
ERROR: pygame.macosx import FAILED
任何人有一個解決的辦法?
幾個小時後發現問題和解決方案。原來其他人都遇到過類似的問題,他們的文章是相當有幫助的:
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
調整路徑,安裝軟件包 - 從這裏開始,您需要調整路徑以確保您使用的是自定義安裝版本。從這裏,我重新安裝下面的包 - 這竟然是一個噩夢般的依賴,所以我包括版本號,以及:
如果這些軟件包真正起作用,那麼您應該可以立即構建並運行您的應用程序。不幸的是,他們沒有。我會稍微介紹這些錯誤和我的黑客解決方案,但是在構建文件中有一些設置需要先做好。
首先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計算機上工作的編譯應用程序。
感謝您發表您的發現!
我有一個類似的問題。我嘗試了各種你所建議的組合,並且將單個問題隔離爲我在上面確定的boot_app.py中的錯誤。
一旦我將上面確定的boot_app.py添加到單行修復程序中,即使使用預安裝的python版本(版本2.6.1),也能正常工作。
我要指出的是,當我說「一切正常,」我真的是建設一個py2app應用實際分佈,即使用普通的命令:
python setup.py py2app
「別名」模式。即
python setup.py py2app -A
其中py2app文檔建議在開發過程中使用,仍然不適用於我(與相同的模塊未找到錯誤)。但更好的實際分配建設工作比什麼都沒有!再次,謝謝。
+1因爲你給自己寫了一個很好的答案。肯定會有人需要這個。 :) – Donovan 2011-03-06 00:08:45
感謝您的詳細解釋。它幫助我構建了自己的應用程序。 – 2012-07-18 01:51:37