Python是一非常Nice的脚本语言;
这些天研究在自己的项目中嵌入Python脚本语言。
使用原生的Python C API 太麻烦,诸多的函数看上去就怕。只有考虑依赖一些成熟的三方工具喽。
目前名气最大的只有boost.python了,于是就down了一份boost.1.55.0,内部的boost.python 2.0;
然后就是选择python的版本了,目前流行的python版本都是2.5~2.7,在几乎所有linux发行版及大量软件中都集成;boost3.x还没有铺开应用。
看了对比了一下python3和python2差异,犹豫了一下,还是体验高版本吧,于是选了python3.3。
接下来就是编译boost.python了(环境:windows7 x64)
这里遇到了一个小问题就是 python路径的设置,boost的编译器bjam会根据环境变量%PATH%中python.exe所在的目录确定其所依赖的python头文件及库的目录。
顺利编译通过并写了个小测试程序,OK!
对boost.python不熟,只能摸着文档慢慢学,浏览了一遍文档才发现,boost.python目前的状态非常适合做python的扩展库,而对嵌入式的应用支持却非常少,文档中说,支持的很少,还需要使用python C API,并提到以后的岁月里可能会更好的支持(呵呵,目前是等不了了)
看上去需要仔细研究Python C API 了,大约一天后上网搜了一下,貌似可以嵌入,不过直接按照帖子上的方法没有成功,因为它使用的是python 2.x版本,和我用的python3.3有所差异,但终归是可以行的通的。
char const* greet()
{
return "hello, world";
}
BOOST_PYTHON_MODULE(hello)
{
def("greet", greet);
}
int testX()
{
PyImport_AppendInittab("hello",PyInit_hello);
Py_Initialize();
//program call python scripts below;
//PyRun_File()
//...
Py_Finalize();
}
BOOST_PYTHON_MODULE(hello)
定义了一个PyInit_hello的函数,该函数返回PyObject * ,是一个module,Python3中使用
PyImport_AppendInittab()
初始化这个Module。
在接下来PyRun_File()中引用hello模块,调用hello模块中的greet()方法都OK!
今天先写到这里~希望以后自己能将自己在实际项目中的经验积累下来~