Objective-C プログラムから Python コードを呼び出す最良の方法を探しています。詳細:
- Python のコードは PyObjC をまったく使用せず、Python の基本のみを使用します。
- それぞれ同様の機能を備えた Python のファイルがいくつかあります (別名「テーマのバリエーション」)。
NSバンドル
各 *.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
正常に動作しますが、いくつかの問題があります。
- 大・結束サイズ。Foundation はインポートされず、バンドルは半スタンドアロン (フラグ「-s」) ですが、*.bundle のサイズは ~1MB です。サイズを小さくする他の方法はありますか?
- PyObjCの依存関係。クラスは objc を使用しませんが、サブクラス化しない場合
NSObject
、Objective-C 側で[bundle principalClass]
はインスタンス(Null)
化PythonClass
できません。NSObject
*.py での使用を避ける方法はありますか?
CFバンドル
私も を使用することを考えていましCFBundle
たが、CFBundleGetFunctionPointerForName(...)
常に返されますNULL
(もちろん、この場合 *.py にはクラスではなく関数が含まれています)。この件に関する資料は見つかりませんでした。多分あなたの何人かはもっと幸運です。
Python を Objective-C に埋め込むより良い方法はありますか?