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

Python 如何从Objective-C调用PyObjC代码?,python,objective-c,cocoa,pyobjc,Python,Objective C,Cocoa,Pyobjc,可能重复: 我是一名长期Python程序员和短期Cocoa程序员。我刚刚开始使用PyObjC,它真的很神奇,它是多么容易完成事情。这就是说,我想尝试将纯ObjC用于我的控制器和PyObjC模型。我可能很喜欢让Python成为Python,让Objective-C成为Objective-C。无论如何,我觉得这是值得一试的 除了我不知道或者找不到任何关于如何从Objective-C调用Python的方法,只有相反的方法。有人能告诉我这方面的资料吗?(可能在PyObjC网站上,但我不知道我在找什么?

可能重复:

我是一名长期Python程序员和短期Cocoa程序员。我刚刚开始使用PyObjC,它真的很神奇,它是多么容易完成事情。这就是说,我想尝试将纯ObjC用于我的控制器和PyObjC模型。我可能很喜欢让Python成为Python,让Objective-C成为Objective-C。无论如何,我觉得这是值得一试的

除了我不知道或者找不到任何关于如何从Objective-C调用Python的方法,只有相反的方法。有人能告诉我这方面的资料吗?(可能在PyObjC网站上,但我不知道我在找什么?)


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

哎呀,我想我应该再搜索一下:


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

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

最后,您可以在Objective-C代码中实例化python解释器以加载python代码。这显然更复杂,但如果您已经有了一个大型Objective-C代码库,并且希望将python代码注入其中,那么这可能是最好的选择。Xcode中Python Cococa应用程序模板中的main.m文件是一个很好的起点,可以看到这一点