尝试在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