4

我正在使用 Xcode 4.6.2 构建一个 PyObjC 应用程序,并试图弄清楚如何将 Python 框架与我的应用程序捆绑在一起,这样我就可以在不依赖具有特定 Python 版本的主机系统的情况下引用它。

(我之前问过这个问题,但从那以后,我决定嵌入框架是更好的方法。)

我知道这是人们会做的事情——根据我的经验,大多数独立的 Python 应用程序都在其中打包了 Python 安装。但我不知道如何让它为我工作。

我已经使用构建阶段“复制文件”面板将 Python.framework 复制到我的项目中,并且 Python.framework确实显示在我的应用程序包中,但我不知道如何让应用程序引用它。

如果我在 Xcode 的“链接框架和库”中链接到 Python.framework,应用程序会正确构建,但在 10.6 上启动时失败并出现错误

Dyld Error Message:
    Library not loaded: /System/Library/Frameworks/Python.framework/Versions/2.7/Python
    Referenced from: {/path/to/my/app}
    Reason: image not found

...因为 10.6 只有 Python 2.5,它正在搜索系统框架,而不是我的应用程序包中包含的框架。

如果我没有链接到 Xcode 中的 Python 框架,应用程序将无法构建。

那么如何告诉我的应用程序我希望它使用捆绑在我的应用程序中的 Python.framework appname.app/Contents/Frameworks/Python.framework,而不是位于的系统 Python.framework /System/Library/Frameworks/Python.framework

我在这个问题上有点僵局,任何帮助将不胜感激。

4

1 回答 1

4

不要试图将 /System/Library/Framework/Python.framework 复制到您的应用程序包中,这几乎肯定不会满足您的要求(该应用程序无法在较旧的 OSX 版本上运行,并且在相同或更新的 OSX 版本),并且是狡猾的许可证明智的。

要使用该框架,您需要重写加载命令,方法是使用 install_name_tool,或者创建一个自定义 python 框架,该框架已经具有正确的安装名称值(类似于 @executable_path/../../Framework/Python.框架/Python。

我通常使用 py2app 来创建应用程序包(这并不奇怪,因为我是 py2app 的维护者),它也会自动包含所需的 Python 依赖项。

于 2013-07-29T21:11:14.417 回答