如何强制使用py2app在32位模式下运行应用程序。

4

我正在尝试在Mac OS X 10.6上使用py2app构建应用程序包。该应用程序使用一些仅编译为32位的库,因此当运行应用程序时会出现ImportError“没有适当的64位架构”。我该如何告诉py2app强制应用程序以32位模式运行?

5个回答

6
如果您只想以32位模式运行,那么您就不需要64位架构。因此,您可以使用 ditto 实用程序从生成的应用程序捆绑包中剥离所有非i386架构。
示例:
ditto --rsrc --arch i386 YourApplication.app YourApplicationStripped.app

你的应用程序包将更小,即使在64位Intel系统上也会作为32位应用程序运行。
手册:http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/ditto.1.html 或者在终端中运行:man ditto

5
一种方法是使用仅支持32位的Python,例如从python.org可下载的32位版本,再使用py2app。另一种方法是在生成的应用程序包的Info.plist中将LSArchitecturePriority设置为i386和可能的ppc。更多信息请参见此处

谢谢,我最终使用了python.org上的32位构建版本。 - Luke McCarthy
这对我没用。我不得不使用同样的解决方案 - Vebjorn Ljosa
在1.6.8版本中,我制作了一个用于分发的应用程序,然后通过在Property List Editor中编辑info.plist文件,在树的根目录下添加了一个名为“Architecture Priority”的集合(在弹出窗口中提供)。令人惊讶的是,默认设置立即提供了i386。保存后,应用程序开始运行而没有32位错误。 - ljgww
我收回之前的话:它确实可以工作。我的错误在于将值设为字符串而不是字符串数组。 - Vebjorn Ljosa

4

经过多次尝试,我终于成功使用了以下方法使wx正常工作。我还提供了我安装的版本号。
这是唯一对我有效的方法,希望能帮助其他人。

py2applet --arch=i386 -i (includes here) --make-setup (pythonfiles, icon)

我的外观有点像这样。
py2applet --arch=i386 -i wx, platform --make-setup print.py print.icns convert.py

我安装了Python2.7和
wxPython2.8-osx-unicode-py2.7
setuptools-0.6c11-py2.7.egg
然后

sudo easy_install-2.7 py2app

这是py2applet的安装版本0.6.4


1

好的,考虑到我离Vebjorn仅隔一个办公室,可能这是发布答案的最佳位置,以便我们能够再次找到它。 给定py2app选项的字典:

options = {}
...
options['plist'] = { "LSArchitecturePriority": [ "i386" ] }
...
setup(options={'py2app':options})

这将创建一个包含一个字符串值的数组,用于LSArchitecturePriority键。

0

你需要强制让Python以32位模式运行。


是的。我正在使用arch -i386运行setup.py,但生成的应用程序仍然尝试以64位运行。 - Luke McCarthy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接