0

我正在使用 Xcode 构建 PyObjC 应用程序。该应用程序在构建机器(运行 10.8)上运行良好,但在运行 10.6 的机器上启动时崩溃,因为它无法找到 Python 2.7 安装。很公平——10.6 上预装的 Python 是 Python 2.5。但我并不关心我的应用程序使用哪个 Python 版本,我只是希望它使用它可以找到的最新版本的 Python。

我怎么能:

A)告诉我的应用程序使用主机系统上可用的最新版本的 Python,或者

B) 将整个 Python 源代码捆绑到我的应用程序中?

我对这个问题感到非常沮丧,任何帮助将不胜感激!

4

2 回答 2

0

好问题。几年前,我因嵌入问题而为此苦苦挣扎,最终动态链接到我知道在每个平台上都可用的特定版本。

我最初假设Python.framework'sCurrent就足够了,但它似乎在 Xcode 链接时得到解决,因此使链接特定于特定版本。出于我的目的,我能够直接链接到

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Python.framework/Versions/2.7/Python

适用于 OS X 10.7 和 10.8。如果你需要回到 10.6,你会想尝试链接到

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Python.framework/Versions/2.5/Python

显然,如果您要针对 10.6 SDK 进行编译,您会想要使用它,但关键是要确保您链接到特定于版本的库版本,而不是框架版本本身。您应该可以通过Link Binary with Libraries中的+按钮手动导航到特定版本,但如果遇到问题,您可以直接在 Finder 中打开 SDK 中的 Python.framework 并将特定于版本的库拖入Link Binary with Libraries组。

如果您找到解决此问题的方法,请在此处发布另一个答案,但这对我来说是有效的链接以嵌入到我的应用程序中。

于 2013-07-29T10:07:34.570 回答
0

使用 py2app 创建应用程序包,并使用单独的 Python 安装(即不要使用 /System/Library/Framework/Python.framework)来执行此操作。您使用的 python 安装应该使用 MACOSX_DEPLOYMENT_TARGET 编译为您想要支持的最低 OSX 版本。

当你这样做时,应该可以部署到旧的 OSX 版本。我经常这样做是为了在 10.8 机器上构建应用程序,然后部署到 10.5 机器上。

在包含其他库时,您确实需要小心谨慎,尤其是当这些库包含配置脚本时:有时配置脚本会检测到构建机器上可用的功能,但部署机器上却没有。

顺便提一句。您需要链接到与您在运行时使用的相同版本的 Python。CPython 的 ABI 在功能版本之间不兼容(即 2.6 ABI 不一定与 2.7 ABI 兼容)。对于 python 3.x,有一个在功能版本之间兼容的稳定 ABI,但主要针对 Python 扩展的 AFAIK,我不知道这对于将 Python 嵌入您的应用程序有多大用处。

于 2013-07-29T21:18:25.553 回答