【问题标题】:Bundle Python framework into Xcode app将 Python 框架捆绑到 Xcode 应用程序中
【发布时间】:2013-07-29 17:58:18
【问题描述】:

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

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

我知道这是人们会做的事情——根据我的经验,大多数独立的 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,它正在搜索系统框架,而不是我的 app bundle 中包含的那个。

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

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

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

【问题讨论】:

  • 你试过使用py2app吗?
  • 我有,并且使用 py2app 打包应用程序效果很好,但是我在应用程序的功能方面遇到了一组单独的问题。 (我的应用程序打算作为后台应用程序运行,但我遇到了问题,直到它被带到前台一次才能开始运行。)我遇到的大多数线程似乎表明通过 Xcode 打包应用程序是“正确”的方式来做到这一点,所以这就是我决定尝试的。但也许这是个坏建议。
  • 10.6?您预计会有很多用户拥有 Snow Leopard 吗?
  • 我在使用 py2app 之前编写了后台 osx 应用程序,它们运行良好。我相信有一个名为 LSUIElement 的选项,如果您设置为 True,它将消除停靠图标。并且相当多的人仍在使用 10.6,而且它仍然受到 Apple 的支持
  • @YusufX 如果可能,我想支持 10.6。它才两岁。

标签: python xcode macos xcode4.5 pyobjc


【解决方案1】:

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

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

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

【讨论】:

  • 我认为这对我来说是个问题。它非常具体地不捆绑 Python,实际上它甚至根本不捆绑 python,它搞砸了路径设置,如果不将其覆盖到我的系统 python 中,我就无法运行它。你能解释一下@executable_path 是什么,以及它的扩展时间。另外,为什么不在 /Contents/Frameworks 中放置任何框架?
  • @executable_path 是 dyld 加载命令中的特殊路径,并在加载时扩展为二进制文件的路径(在 .app 中,它是 MyApp.app/Contents/MacOS 中的主要二进制文件)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
相关资源
最近更新 更多