scu*_*cum 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 - 我的第一个问题是依赖Apple的Python包构建.不要使用它.您需要安装自己的python版本.转到http://www.python.org/download/releases/,找到一个版本(我坚持使用2.6),下载gzip(不是mac包),如果你正在运行Snow Leopard,请安装以下内容:
./configure --enable-framework MACOSX_DEPLOYMENT_TARGET=10.6 --with-universal-archs=intel --enable-universalsdk=/
make
sudo make install
Run Code Online (Sandbox Code Playgroud)
调整路径,安装软件包 - 从这里,您需要调整路径以确保使用自定义安装的版本.从这里,我重新安装了以下软件包 - 这被证明是一个依赖性的噩梦,所以我也包括版本号:
如果这些软件包确实有效,您应该能够立即构建和运行您的应用程序.不幸的是,他们没有.我会稍微介绍一下错误和我的黑客攻击解决方案,但是构建文件中有一些需要先设置的设置.
首先,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},
)
Run Code Online (Sandbox Code Playgroud)
然后为了更加安全,我使用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
Run Code Online (Sandbox Code Playgroud)
运行build.sh应该编译应用程序.如果它不编译,我有好消息 - 这不是你的错.由于库中的故障,您可能会遇到以下一些(或全部):
潜在问题 如果构建脚本失败,请扫描回溯以查找以下某些关键字:
找不到pygame - py2app中的基本路径问题.加...
sys.path.insert(0, os.path.join(os.getcwd(), 'lib', 'python2.6','lib-dynload')) ## Added to fix dynlib bug
Run Code Online (Sandbox Code Playgroud)
在py2app lib 中的boot_app.py中的import语句之后.
pythonNone - 这似乎是macho包中的一个错误,它无法确定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'])
Run Code Online (Sandbox Code Playgroud)
没有这样的文件或目录...... Python.framework/[lib | include] - py2app只是在寻找文件系统树中更深层的目录.转到Python.framework目录并在该地方符号链接...
cd /Library/Frameworks/Python.framework
sudo ln -s Versions/Current/include/ include
sudo ln -s Versions/Current/lib lib
Run Code Online (Sandbox Code Playgroud)
应该这样做! - 这些步骤创建了一个可在其他intel机器上运行的已编译应用程序