(收录)Python-接口库比较

2016/11/03 Python

介绍

为了不重复造轮子,应该使用现有的代码,有些事C/C++写的,这就需要选择一个号的接口工具,查看Python官网接口工具介绍

发现有很多种,在此列举对比下。

SWIG

支持 Python 2 and 3
配置正确的话,可以全自动完成封装(*.i文件需要自己写)
当不是全自动的时候,它大多会重复你的.h文件并给出提示
除了Python外,还支持其他语言(Java, Ruby, Lua, 等)
输出一个本地文件(这个文件会被编译成.pyd)和一个封装(这个封装是python脚本,调用对应生成的.pyd)
绑定(Bindings)的性能不是太好,不支持内部类(inner classes)的封装
不支持属性(通过getter/setters访问values)
文档很全,很容易学习
google使用了
C++支持不太好

Boost::Python

支持 Python 2, 3和C++的绑定
对于新手来说,学习它的语法有一定难度。但是这些语法很直观
大量使用了 C++ templates (可能是好事,也可能是坏事),会很明显地提高编译时间
随boost库一起发布,且boost库有用,但很大
刚开始编译使用boost.python封装好的C++代码时,出现的各种错误
一些语法不易学习,像函数返回值时的规则
非常可靠、稳定、经过充分测试的库(boost库里的部件都具有这特性)
不支持属性
支持文档写得比较差,有些功能文档里甚至都没有写。
编译后的pyd文件有些大,这不利于在手机或者嵌入平台使用
配合py++使用,几乎可以全自动封装项目

Py++

支持 Python 2, 3 和C++的绑定
它调用boost.python自动完成项目绑定,相当于boost.python的高级工具

PyCxx

支持 Python 2, 3 和C++的绑定
轻量级的封装库,用的人挺多
只支持C++
目前没有自动绑定工具

python C api(Python 的帮助文档里有)

性能高
灵活
适合嵌入式
C++支持差
复杂

ctypes(Python自带的库)

灵活
对c的代码几乎无缝调用
使用起来比较繁琐
只支持c语言

SIP

支持 Python 2, 3 和C++的绑定
在PyQt中使用过,其他地方很少见它

Weave

性能高
很少见

Pyrex

很少见
目前还没有成熟的项目
性能较高
接近于Python语法

使用

这里以SWIG工具为介绍:

  1. 准备两个文件cmodule.i和setup.py:

    cmodule.i:用于描述需要桥接的接口 setup.py:包含需要使用vc编译的文件,其中有一个cmodule_wrap.c是使用步骤1编译出来的文件。

  2. swig -python cmodule.i

    使用swig生产两个文件:

    1. cmodule_wrap.c 使用swig定义的结构包裹C接口。
    2. cmodule.py 供python调用的脚本。
  3. python setup.py build

    option:if error occur like this:Unable to find vcvarsall.bat,modify file msvc9compiler.py like this: find line contains “toolskey” and modify this line as “toolskey = “VS100COMNTOOLS”,for my vc version is vs2010.

  4. goto extend\build\lib.win32-2.7,run “python -m py_compile cmodule.py”,this cmd will update cmodule.pyc.

  5. goto dir build\lib.win32-2.7,copy pyd(dll) and cmodule.pyc to dir code.and we can import cmodule.


转载作品
转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本人联系,我们将在第一时间删除内容!

站内搜索

    撩我备注-博客

    joinee

    目录结构