py2app built app在其他机器上显示`ERROR:pygame.macosx import FAILED`

时间:2011-03-05 02:03:23

标签: python macos pygame py2app

尝试使用py2app在Mac上构建应用。在我的机器上一切正常,但是当将应用程序移动到另一台时,它会崩溃并且控制台会显示此错误。

ERROR: pygame.macosx import FAILED

有人有解决方法吗?

2 个答案:

答案 0 :(得分: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

调整路径,安装软件包 - 从这里,您需要调整路径以确保使用自定义安装的版本。从这里,我重新安装了以下软件包 - 这被证明是一个依赖性的噩梦,所以我也包括版本号:

  • 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

在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'])

没有这样的文件或目录...... 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

应该这样做! - 这些步骤创建了一个可在其他英特尔计算机上运行的已编译应用程序。

答案 1 :(得分:2)

感谢您发布您找到的内容!

我有类似的问题。我尝试了你建议的各种组合,并将我的单个问题隔离为你在上面确定的 boot_app.py 中的错误。

一旦我将上面标识的boot_app.py添加到单行修复程序中,即使使用预安装的Python版本的Python(版本2.6.1),一切都能正常工作。

我应该注意,当我说“一切正常”时,我的意思是建立一个py2app应用程序进行实际分发,即使用正常的命令:

python setup.py py2app

“别名”模式。即

python setup.py py2app -A
py2app文档建议在开发过程中使用的

对我来说仍然不起作用(找不到相同的模块错误)。但更好的实际分布构建工作比什么都没有!再次,谢谢。