2013年6月10日月曜日

pythonのC++への埋め込みとpythonライブラリの設定

------CppWithPython.cpp------
#ifdef CPPWITHPYTHON_UNIT_TEST
#include "CppWithPython.h"
#include <iostream>
#include <python3.3m/Python.h>

using namespace none;

int main(int argc, char* argv[])
{
Py_Initialize();
PyRun_SimpleString("import jinja2\nprint(\"Hello\")\ntemplate = jinja2.Template('hello {{message}}')\nstr = template.render(message='test')\nprint(str)");
Py_Finalize();
    return 0;
}

#endif

------CppWithPython.mk------
CXX = g++ -std=gnu++11
CXXFLAGS = -Wall -g -D CPPWITHPYTHON_UNIT_TEST
INCLUDES = 
LIBS = -lpython3.3m
OBJS = CppWithPython.o
PROGRAM = CppWithPython.out

all:$(PROGRAM)

$(PROGRAM): $(OBJS)
$(CXX) $(CXXFLAGS) $^ $(INCLUDES) $(LIBS) -o $(PROGRAM)

.cpp.o:
$(CXX) $(CXXFLAGS) $(INCLUDES) $(LIBS) -c $<

.PHONY: clean
clean:
rm -f *o $(PROGRAM)
---------------------------------------

C++プログラムと同じディレクトリでvirtualenvを設定し、virtualenvのpipでjinja2をインストール
envを削除すると実行できなくなるので、どうやら検索パスにC++プログラムの実行ディレクトリ以下が含まれているようだ。