2
我正在尋找從Objective-C程序中調用Python代碼的最佳方式。 一些細節:從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
它工作正常,但有幾個問題:
- Large * .bundle size。儘管Foundation is not imported和捆綁包是半獨立的(標誌「-s」),但是.bundle的大小爲〜1MB。還有其他減小尺寸的方法嗎?
- PyObjC依賴。 Class不使用objc,但如果我們沒有繼承
NSObject
,那麼在Objective-C端,[bundle principalClass]
是(Null)
而PythonClass
不能被實例化。有沒有辦法避免在* .py中使用NSObject
?
的CFBundle
我也一直在考慮使用CFBundle
,但CFBundleGetFunctionPointerForName(...)
總是返回NULL
(當然,在這種情況下,*的.py包含一個函數,不是類)。在這件事上我找不到任何材料。也許你們中的一些人更幸運。
有沒有更好的將Python嵌入Objective-C的方法?