我正在尝试在 Mac OS X 10.6 上使用 py2app 构建应用程序包。该应用程序使用了一些仅针对 32 位编译的库,因此当应用程序运行时,会出现 ImportError “没有适当的 64 位架构”。如何告诉 py2app 强制应用程序以 32 位模式运行?
5 回答
如果您只想在 32 位模式下运行,则不需要 64 位架构。ditto
因此,您可以使用该实用程序从生成的应用程序包中删除所有非 i386 架构。
例子:
ditto --rsrc --arch i386 YourApplication.app YourApplicationStripped.app
您的应用程序包会更小,并且肯定会作为 32 位应用程序运行,即使在 64 位 Intel 系统上也是如此。
手册:http: //developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/ditto.1.html
或者只是在终端中运行:man ditto
一种方法是使用 32 位 Python,例如可从 python.org 下载的 32 位版本和 py2app。另一种方法是设置LSArchitecturePriority
toi386
并且可能ppc
在生成的应用程序包的 Info.plist 中。请参阅此处了解更多信息。
在经历了很多痛苦并试图让 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
我用
wxPython2.8-osx-unicode-py2.7
setuptools-0.6c11-py2.7.egg安装了 python2.7
然后
sudo easy_install-2.7 py2app
这安装了 0.6.4 版的 py2applet
好的,当我在 Vebjorn 的一个办公室工作时,可能这是发布答案的最佳地点,所以我们会再次找到它。给定一个 py2app 选项字典:
options = {}
...
options['plist'] = { "LSArchitecturePriority": [ "i386" ] }
...
setup(options={'py2app':options})
这将为 LSArchitecturePriority 键创建一个包含一个字符串值的数组。
您需要强制 python 在 32 位模式下运行。