你如何从Objective-C调用PyObjC代码?

时间:2009-11-06 17:15:42

标签: python objective-c cocoa pyobjc

  

可能重复:
  Calling Python from Objective-C

我是一名长期的Python程序员和短期的Cocoa程序员。我刚刚开始使用PyObjC,真的很棒,完成这些工作是多么容易。也就是说,我想尝试使用纯ObjC作为我的控制器和PyObjC模型。我可能会喜欢让Python成为Python而Objective-C成为Objective-C。无论如何,我认为值得一试。

除了我无法弄清楚或找到任何关于如何从Objective-C调用Python的东西,只是相反。有人能指出我的任何资源吗? (也许它在PyObjC网站上,但我只是不知道我在找什么?)

编辑:我最感兴趣的是,在基础层面,能够调用Python模块并获得一些原生的ObjC数据类型。

2 个答案:

答案 0 :(得分:3)

有几种可能的方法。最吸引人的是使用py2app从python代码编译可加载的包,您可以使用NSBundle从中访问主类。不幸的是,这个用例并没有得到py2app开发人员的太多喜爱,我在10.5和10.6中发现了几个错误,包括在将数据从python传回Objective-C时相当讨厌的内存泄漏。我不建议在这一点上使用py2app。

第二种方法是反转嵌入。编写Python cocoa应用程序并在启动时从bundle中加载Objective-C代码(甚至在main()中)。如果您已经有一个大型的Objective-C应用程序,这可能需要一些工作。我所知道的唯一缺点是你无法在Objective-C代码中使用GC,但这在使用PyObjC时确实是一个普遍的限制。

最后,您可以在Objective-C代码中实例化python解释器以加载您的python代码。这显然涉及更多,但如果你已经有一个大的Objective-C代码库,你想要注入你的python代码可能是最好的选择。来自Xcode中的Python-Cococa应用程序模板的main.m文件是开始看到这一点的好地方。

答案 1 :(得分:0)

哎呀,猜猜我应该多搜索一下:

Calling Python from Objective-C