【问题标题】:How do you call PyObjC code from Objective-C? [duplicate]如何从 Objective-C 调用 PyObjC 代码? [复制]
【发布时间】:2009-11-06 17:15:41
【问题描述】:
可能重复:
Calling Python from Objective-C
我是一名长期的 Python 程序员和短期的 Cocoa 程序员。我刚刚开始使用 PyObjC,完成工作如此简单真是令人惊讶。也就是说,我想尝试将纯 ObjC 用于带有 PyObjC 模型的控制器。我可能会喜欢让 Python 成为 Python 而 Objective-C 成为 Objective-C。无论如何,我认为值得一试。
除了我无法弄清楚或找到有关如何从 Objective-C 调用 Python 的任何信息,只能反过来。有人可以指点我这方面的任何资源吗? (也许它在 PyObjC 网站上,但我只是不知道我在寻找什么?)
编辑:在基本层面上,我最感兴趣的是能够调用 Python 模块并返回一些原生 ObjC 数据类型。
【问题讨论】:
标签:
python
objective-c
cocoa
pyobjc
【解决方案1】:
有几种可能的方法。最诱人的是使用 py2app 从你的 python 代码编译一个可加载的包,你可以使用NSBundle 访问主体类。不幸的是,这个用例并没有得到 py2app 开发人员的喜爱,我在 10.5 和 10.6 中发现了几个错误,包括将数据从 python 传回 Objective-C 时相当严重的内存泄漏。我不建议此时使用 py2app。
第二种方法是反转嵌入。编写一个 Python 可可应用程序并在启动时从包中加载您的 Objective-C 代码(甚至在 main() 中)。如果你已经有一个大型的 Objective-C 应用程序,这可能需要一些工作。我知道的唯一缺点是您将无法在 Objective-C 代码中使用 GC,但这确实是使用 PyObjC 的普遍限制。
最后,您可以在您的 Objective-C 代码中实例化一个 Python 解释器来加载您的 Python 代码。这显然涉及更多,但如果您已经有一个大型的 Objective-C 代码库来注入您的 python 代码,这可能是最好的选择。 Xcode 中 Python-Cococa 应用程序模板中的 main.m 文件是一个很好的起点,可以开始了解它的实际效果。