高效开发Python扩展模块方法:用SWIG封装C/C++代码
来源:互联网 发布:vmware上安装ubuntu 编辑:程序博客网 时间:2024/05/25 16:39
原文首发地址: http://www.atolin.net/298/
1. SWIG介绍:
http://sourceforge.net/projects/swig/
2. 对于性能有追求的功能模块(这并不意味着python性能低),自然需要考虑用C/C++扩展python模块;
方法其实有两种:
一是遵从python扩展模块API规范,用C/C++直接写python模块;
此方法开发出来的扩展模块(DLL动态库),可看做原生的python模块,
不需要依赖其他第三方库;缺点是,开发需要写大量的规范的C/C++到Python的转换代码
(这部分代码按照规范写就可以,算是体力劳动);
一是使用SWIG工具,这样,开发高性能的C/C++代码后,不用再手工写从C/C++到python的转换代码,
这个工作SWIG帮你做了。可谓十分方便,所谓高手,也就是能熟练使用各种工具及原理,
并运用的实际设计中。呵呵,下面就这种方法,做一个简单介绍:
3. 使用SWIG包裹C/C++代码生成python扩展模块步骤
3.1 写SWIG的接口文件(.i),见下面例子:
%module tmc
%{
#include “PreProcessTMC.h”
%}
%include /* 若需要stl的string类或方法,需要包含此文件 */
%include /* 若需要C++类或方法导出符号,需要包含此文件 */
%include “PreProcessTMC.h”
3.2 使用SWIG自动生成包裹类(即C/C++到python的转换代码)
E:\code\swigwin-2.0.9>swig.exe -c++ -python E:\2013\01\2013-01-16\CalcMesh\TMC\TMC.i
3.3 python扩展模块编译安装
准备setup.py脚本如下:
from distutils.core import setup, Extension
ext_module = Extension(‘_tmc’,
include_dirs = [r'..\..\..\..\..\code\gdal\ogr\ogrsf_frmts\shape'],
define_macros = [('TMC_EXPORTS', '1')],
libraries = ['LibPort', 'LibShape'],
library_dirs = [r'..\Test\Release'],
sources = ['TMC_wrap.cxx', 'PreProcessTMC.cpp'],
)
setup(name=’tmc’,
version=’1.0.0′,
description = ‘This is a demo package’,
ext_modules = [ext_module],
py_modules = ['tmc'],
)
注意Extension里面的模块name为_tmc(需要加下划线前缀,否则会出现链接错误)
3.4 python setup.py build
enjoy it.
- 高效开发Python扩展模块方法:用SWIG封装C/C++代码
- 高效开发Python扩展模块方法:用SWIG封装C/C++代码
- SWIG and Python(用SWIG将C/C++封装为Python扩展模块)
- SWIG封装C代码
- 通过SWIG封装C/C++代码被Python调用
- 用Swig封装C/C++
- 用Swig封装C/C++
- 通过SWIG用C语言编写Python扩展
- Python 使用C代码——swig
- Swig:C/C++代码转Python
- swig c python
- Python与C++,SWIG
- 使用swig为python添加c扩展总结
- 使用swig进行C/C++对Python的扩展
- 使用Swig为Python程序添加C扩展
- 用Swig将c/c++程序转为java代码(使用swig实现java调用c、c++的方法)
- win7 swig c++封装 python 扩展
- 用C语言编写Python扩展模块
- 数字图像处理1----概述
- Oracle软件安装及手工建库
- 阿斯顿发生的发生地方
- 【大数+DP】HDU 1133——Buy the tickets(不用catalan数了)
- hibernate中one-to-one两种配置方式
- 高效开发Python扩展模块方法:用SWIG封装C/C++代码
- 2012年年度总结 2013年2月25日21:49:44
- HTML 5 meta name="viewport"
- linux 问题
- tcpdump命令详解
- Python的Distutils模块与cx_Freeze对比
- 国家基本比例尺地形图分幅和编号
- java利用jxl读写excel表格
- java文件复制最快的方法!