开发者社区> 最美的回忆> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

使用pyste自动生成c++类的python wrapper

简介:
+关注继续查看
pyste是boost.python自带的代码生成器,利用pyste可以很方便的为c++ 的 lib加一层python的shell。如果当前boost版本不支持pyste的话,可以到boost官方网站上下载最新版本的boost源码。以 boost 1.3.1为例,进入boost_1_33_1/libs/python/pyste/install目录,运行python setup.py install,安装pyste。

安装完pyste后还不能直接用,因为pyste依赖gccxml,所以需要安装gccxml。最好从源码make。直接安装二进制我没安装成功。如果 gcc环境是gcc4.*,需要从cvs下载最新的gccxml。gcc xml采用cmake控制,没cmake的最好安装cmake(从源码make,最好不要安装二进制的)。

pyste使用模式推荐如下:

写一个配置文件My.pyste,上面写好类的映射项,如
Class("A", "A.h")
代表将A.h中的c++类A的public成员映射为python中的类A的相关成员

python -I/usr/include/python2.4 -I...... --module=MyModule My.pyste

将会自动生成一个wrapper的cpp程序。编译链接这个程序及其依赖项为MyModule.so,就可以直接在python中使用类A了。

需要注意的是,如果A中某些public 方法参数或返回值是指针或引用,因为pyste不能判断其生命周期,因此不能正确的转换,会报错误。此时,需要对这个方法加上一些策略约束。

常用策略有:

# with_custodian_and_ward
Ties lifetimes of the arguments
# with_custodian_and_ward_postcall
Ties lifetimes of the arguments and results
# return_internal_reference
Ties lifetime of one argument to that of result
# return_value_policy<T> with T one of:
# reference_existing_object
naive (dangerous) approach
# copy_const_reference
Boost.Python v1 approach
# copy_non_const_reference
# manage_new_object
Adopt a pointer and hold the instance

具体的解释和使用方法见:
http://www.boost.org/libs/python/doc/tutorial/doc/html/python/functions.html#python.call_policies

策略可以嵌套,如

policy1<args...,
    policy2<args...,
        policy3<args...> > >

以一个例子说明在pyste配置文件中如何使用方法的策略:

假定类B中有一个方法:
A* B::Method1()
{
    ......
}

A*是B管理的一个对象,其生命周期由B控制。

那么pyste策略应该写为:

CLASS_B = Class("B", "B.h")
set_policy(CLASS_B.Method1,return_value_policy(reference_existing_object))

注意,Boost.Python中的策略用模板格式< , <, <, ... >>>表示,在pyste中,用()格式表示:( , (, (, ... )))。

更详细的内容还是请看Boost.Python的文档及pyste的文档吧。
Boost.Python文档:
http://www.boost.org/libs/python/doc/tutorial/doc/html/index.html
pyste文档:

http://www.boost.org/libs/python/pyste/index.html

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2006/03/16/351258.html如需转载请自行联系原作者


xiaotie 集异璧实验室(GEBLAB)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《Python编程:从入门到实践》 第二章 动手试一试
《Python编程:从入门到实践》 第二章 动手试一试 动手试一试 2-1 简单消息: 将一条消息存储到变量中,再将其打印出来。 message = ''Hello!" print(message)
1089 0
Python项目实战:20行编程迷宫大阵
前言 由外国人编写的freegames是一个免费的开源游戏集合,这个很方便了我们的开发简单的游戏,又能更好的激发我们学习编程的乐趣 今天为大家介绍一款基于freegames开发的迷宫大阵,只有这短短的20行代码便可完成,你可以稍作修改,让迷宫更难或者更简单 导入第三方库 画迷宫 画点...
1384 0
书籍:python物联网编程项目 Internet of Things Programming Projects - 2018
简介 利用Raspberry Pi 3和Python的组合,充分发挥物联网的潜力 使用IoT构建复杂的基于Python的应用程序 从事各种物联网项目,了解电子产品的基础知识 物联网(IOT)已成功吸引了研究人员和技术爱好者的注意力,因为它将经典网络与仪器和设备完美结合。
1846 0
零基础的你还在纠结怎么学习Python编程吗?
想入门学IT,但不知道从哪门编程语言开始学起的同学有很多,小编建议,在编程语言的选择方面,如果你有自己感兴趣的方向,那么就最好选择自己的兴趣,毕竟有兴趣才能有耐心学习。 如果你是零基础,又暂时没有明确的目标,那么可以先从简单的Python语言入手。
1945 0
这篇文章不能教你python编程,但能带你更全面的了解python!
在10年前的时候,当程序员说"PHP是世界上最好的语言"时,我还是将信将疑的状态,也因为当时的将信将疑而做了五年的PHP程序员。在现在如果还有人跟我说同样的话,我现在一定会笑而不语。难道君不见PHP已经廉颇老矣了吗?当Python作为脚本语言以较低的学习门槛和强大的功能,成为与JAVA, C成为最受欢迎的编程语言时,我心里是默默欢喜的。
1958 0
Python学习笔记:开始Python编程
随着人工智能以及大数据的火热,Python这门语言也被推上了前台,越来越受大家的青睐。受不住诱惑,我也开始努力学习这门语言。边学习,边整理自学笔记,与大家分享,也接受大家的监督,让自已能够坚持下去,熟练掌握和运用这门语言。
2379 0
Python猫荐书系列之五:Python高性能编程
稍微关心编程语言的使用趋势的人都知道,最近几年,国内最火的两种语言非 Python 与 Go 莫属,于是,隔三差五就会有人问:这两种语言谁更厉害/好找工作/高工资...... 对于编程语言的争论,就是猿界的生理周期,每个月都要闹上一回。
1199 0
美亚kindle排名第一的Python 3入门书,火遍了整个编程圈
在美国亚马逊,有一本书的影响力超高的Python入门书,Kindle版本在美国亚马逊网站的计算机软件、软件开发分类中排行均为第一,它就是......
3972 0
google oppia Python Web编程运行环境搭建
Python Web编程   Python的Web框架中,mod-python是一个很方便实用的,而且可以跟其他的框架一起使用的。
1030 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Python系列直播第一讲——Python中的一切皆对象
立即下载
Python 脚本速查手册
立即下载
继承与功能组合
立即下载