Butterfly_Effect( )

地面と別れる方法

MacOSXでboost::python(homebrewユーザー)

はじめに

事情があって,pythonC++を併用したいことがあった.
方法はいくつかあるけれど,C++ユーザーとしてはboost::pythonが良い選択に思える.
しかし普段はXcodeGUIに甘やかされていたので,導入にかなり手こずった.
環境依存な部分は多いかもしれないけれど,忘備録的に上手く行った方法を書いておく.

boost::pythonをインストールする

macユーザーならパッケージ管理ソフトを使っていると思う.
僕は以前までmacportsを使っていた.
しかし学部時代の研究室の先生にhomebrewを勧められたこと,また僕のMacBookAirのSSD残量がひもじい状態になっていたこともあって,今はhomebrewに移行している(10GBぐらいの節約になったりする).
homebrewからboost::pythonをインストールするには,次のコマンドをTerminal上で入力する.

brew install boost-python --with-python3

cppファイルをビルドする

.soファイルを生成するという多少特殊なコンパイルになるので,Terminal上からg++でビルドする.ビルドしたいcppファイル(仮に名前をcpppy.cppとしよう)があるディレクトリにcdで移動してから

$ g++ -I`python -c 'from distutils.sysconfig import *; print get_python_inc()'` -DPIC -bundle -fPIC -o cpppy.so cpppy.cpp -lboost_python  -framework Python

とやればOK.

pythonから実行する

僕はsublime textを使っているのだけれど,とりあえずpython2系で動くみたい(3系だとエラーが出る).

cpppyで2つのdouble値を足して返すadd関数を定義したとして,実行するときは

import sys
sys.path.append('/path/to/the/generated/so/file')
import cpppy
dir(cpppy)
variable = cpppy.add(1.3, 4.1);

などとすれば良い.Pathを追加する部分はsoファイルがある場所を指すようにしておけば良い.