【问题标题】:How to "weak link" to the Python framework on Mac OS X?如何“弱链接”到 Mac OS X 上的 Python 框架?
【发布时间】:2011-10-15 23:51:00
【问题描述】:

我正在尝试创建一个可以链接到 Mac OS X 的内置 Python 框架并让它在 Mac OS X 10.5、10.6 和 10.7 上运行的应用程序。

  1. 如果我尝试硬链接到框架(默认),Leopard 会抱怨他找不到 10.7。
  2. 如果我尝试弱链接框架(在编译器标志中使用 -weak_framework Python),

在这两种情况下,Mac OS X 部署目标都设置为 10.5。

我的 main.m 看起来像这样:

#import <Python/Python.h>
#import <Cocoa/Cocoa.h>

int main(int argc, char *argv[])
{
    Py_SetProgramName("/usr/bin/python");
    Py_Initialize();
    PyRun_SimpleString("import os; os.system('say okay')");
    return 0;
}

该程序在 Mac OS X Lion 上运行,但在 Mac OS X Leopard 上崩溃。它给出了一个带有 EXC_BAD_ACCESS (SIGBUS) 异常的“异常退出:总线错误”(因为它引用地址 0)。

有什么办法

这里有一个测试程序的 zip 文件:

http://slurf.net/files/TheWeakestLink.zip

【问题讨论】:

    标签: python xcode macos pyobjc


    【解决方案1】:

    我不确定您要在这里做什么,但这里有一些建议。在这三个操作系统版本中,系统 Python 框架唯一通用的 Python 版本是 Python 2.5,因此您可能能够显式定位该版本。但是,更有可能的是,您最好将自己的 Python 框架打包到您的应用程序中。如果您小心的话,您可以使用其中一个python.org 32-bit only installers 来实现此目的,尽管最好使用专门为 10.5+ 构建的一个,特别是如果您需要在 10.7 上为您的应用程序构建 C 扩展模块。 py2app 可以通过捆绑非系统 Python 框架来创建独立的 Python 应用程序,而无需 Objective C 前端。也许您可以将它用于您的目的。

    【讨论】:

    • 我已经成功链接到 2.5(因为它随处可用)。我想链接到 Python 的“通用”版本,它将在运行时解析为系统上可用的最新版本的 Python。这可能吗?
    • 在每个 Python 框架中,Versions 目录中都有一个 Current 符号链接。但是,如果您指的是目标代码链接意义上的linking,请记住,Python 项目不保证版本之间的 C 级 ABI 兼容性。如果您只想调用最新的 Python 解释器,您可能应该只使用 /usr/bin/python 中的链接或其他内容。我知道的大多数使用 Python 的第三方应用程序都在应用程序中提供了自己的 Python 副本(使用 py2app 或等效项)。否则太复杂了。
    猜你喜欢
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2011-09-22
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    相关资源
    最近更新 更多