C/C++からPythonを使う
要旨
- Pythonには色々な便利なライブラリがある.C/C++にも便利なライブラリがある.それらが重複しない場合は一方からもう一方を叩けると嬉しい.
- 参考URL 1. Embedding Python in Another Application — Python 3.5.2 documentation
コンパイル方法
- 色々なライブラリやインクルードパスを指定する必要がある.それらを確認するためのツールがpython-config.MacOSだとframework pythonとかで一式いけるみたいだ.全部は要らない場合もあるから,確認してからCMakeList.txt作るのも良いかもしれない.
gcc hoge.cpp $(python-config --cflags) $(python-config --labs)
使い方(1)
- Py_Initialize()でPythonインタプリタを初期化.
- PyRun_SimpleStirng(pythonコード文字列)でpythonコードを実行する.
- Py_Finalize()でインタプリタを終了.
#include <cstdio> #include <Python.h> int main(void) { Py_Initialize(); PyRun_SimpleString("print 'hello world'"); Py_Finalize(); return 0; }
使い方(2)
上の例は実際はあまり使わない.使い方としては既存のスクリプトの中の関数を実行するというシーンが多いはず.これはC->Pythonの例だけど,Python->Cの例も実はほとんど変わらない.やっていることは(1)データの変換,(2)外部での実行,そして(3)データの逆変換.C->PythonとPython->Cでは順番が逆なだけ. 1.
その他メモ
- pythonとcどっちがトップ(どっちからどっち叩くんだろう?)なんだろう?
- topはmainモジュール