gpt4 book ai didi

python - 从 Objective-C 调用 Python 代码

转载 作者:太空宇宙 更新时间:2023-11-04 06:34:34 24 4
gpt4 key购买 nike

我正在寻找从 Objective-C 程序调用 Python 代码的最佳方式。一些细节:

  • Python的代码根本没有使用PyObjC,只是Python的基础。
  • 有几个 Python 文件,每个文件都具有相似的功能(也称为“主题的变体”)。

NSBundle

首先想到的是将每个*.py封装成*.bundle。

Python类.py:

import objc
NSObject = objc.lookUpClass('NSObject')

class PythonClass(NSObject):
def Function(self):
print("Python is speaking!")

设置.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 包含一个函数,而不是一个类)。我找不到关于此事的任何 Material 。也许你们中的一些人更幸运。

有没有更好的方法将 Python 嵌入到 Objective-C 中?

最佳答案

使用Python/C API(Python和C之间的桥梁),调用Python代码的C++类(OOP层更容易管理),以及this将 C++ 类放入 CFBundle 的方法。

如有必要,这也适用于动态库 (*.dylib) 而不是 CFBundle。

关于python - 从 Objective-C 调用 Python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com