【发布时间】:2012-10-24 10:33:03
【问题描述】:
我正在寻找从 Objective-C 程序调用 Python 代码的最佳方式。 一些细节:
- Python 的代码根本不使用 PyObjC,只是 Python 的基础。
- 有多个 Python 文件,每个文件具有相似的功能(也称为“主题变体”)。
NSBundle
首先想到的是将每个 *.py 封装到 *.bundle 中。
PythonClass.py:
import objc
NSObject = objc.lookUpClass('NSObject')
class PythonClass(NSObject):
def Function(self):
print("Python is speaking!")
setup.py:
from distutils.core import setup
import py2app
setup(
plugin = ['PythonClass.py'],
)
终端命令:python setup.py py2app -s -p objc
它工作正常,但有几个问题:
- 大 *.bundle 大小。即使 Foundation is not imported 和 bundle 是半独立的(标志“-s”),*.bundle 的大小约为 1MB。有没有其他方法可以减小尺寸?
-
PyObjC 依赖。类不使用 objc,但如果我们不继承
NSObject,那么在 Objective-C 方面,[bundle principalClass]是(Null)和PythonClass不能被实例化。有没有办法避免在 *.py 中使用NSObject?
CFBundle
我也一直在考虑使用CFBundle,但是CFBundleGetFunctionPointerForName(...) 总是返回NULL(当然,在这种情况下,*.py 包含一个函数,而不是一个类)。我找不到关于这件事的任何材料。也许你们中的一些人更幸运。
有没有更好的方法将 Python 嵌入到 Objective-C 中?
【问题讨论】:
标签: python objective-c nsbundle