boost.python的嵌入

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!微笑


今天先写到这里~希望以后自己能将自己在实际项目中的经验积累下来~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值