swig python

1.软件安装:windows

(1)下载:http://www.swig.org/download.html

解压把swig.exe的地址写入到环境变量的环境变量的Path变量中。

(2)安装Microsoft Visual C++ Compiler Package for Python 2.7 

地址:https://www.microsoft.com/en-us/download/details.aspx?id=44266


2.文件编写: 实例为将C++程序导入python模块

(1)c++头文件

int fact(int, int);

(2)cpp 源文件

#include "example.h"

int fact(int n, int m) {
   return n * m;
}

 (3)swig文件 

/* File: example.i */
%module example

%{
#define SWIG_FILE_WITH_INIT
#include "example.h"
%}
int fact(int n, int m);
下面是具体介绍一下example.i这个文件。

%module 后面的名字是被封装的模块名称。封装口,python通过这个名称加载程序。

%{  %}之间所添加的内容,一般包含此文件需要的一些函数声明和头文件。

最后一部分,声明了要封装的函数和变量。

比较建议的写法是,把要封装的函数声明部分写成头文件,假如为example.h,这样接口文件就非常简单了:

 %module example
 %{
 /* Put header files here or function declarations like below */
#define SWIG_FILE_WITH_INIT
#include"example.h"
 %}
 
%include"example.h"

3.为了建python模块,利用-python参数执行swig 。方便起见创建 swig_shell.py 写入下面程序,然后点击swig_shell.py

1
from os import system
system(' swig -c++ -python example.i' )

执行完命令后生成两个不同的文件:example_wrap.cxx和example.py。

4 利用distutils生成动态库

python自带一个distutils工具,可以用它来创建python的扩展模块。使用它也很简单,只需要先定义一个配置文件,通常是命名为setup.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"" "
setup.py
"" "
from distutils.core import setup, Extension

example_module = Extension( '_example' ,
                            sources=[ 'example_wrap.cxx' 'example.cpp' ],
                            )
setup (name =  'example' ,
        version =  '0.1' ,
        author      =  "SWIG Docs" ,
        description =  "" "Simple swig example from docs" "" ,
        ext_modules = [example_module],
        py_modules = [ "example" ],
        )


方便起见写一个build_shell.py写入, 点击执行生成动态库 _example.pyd
from os import system
system(' python setup.py build_ext --inplace')

:头文件和源文件都是example.*,那么setup.py脚本中Extension的参数必须为“_example”

5.使用

可以将生成的_example.pyd模块和example.py放入自己的模块,直接使用,例如

1
2
3
4
>>>import example
>>> print  example.fact( 4 )
24

6.错误

错误原因: 
报这个错误的原因是Python的distutils模块中的msvc9compiler.py并不从环境变量指定的路径中寻找’vcvarsall.bat’,而是通过注册表来寻找…,然而,不知为什么编译器安装过程没有配置注册表。

解决办法: 
只要手工把注册表配置好,就可以了。 
// 1、打开注册表编辑器 
run regedit 
// 2、配置 
// 2.1、如果你安装的Python是32位的,则,创建如下项: 
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Setup\VC 
// 2.2、如果你安装的Python是64位的,则,创建如下项: 
HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC 
// 3、并在此项下新建字符串值: 
名称:productdir 
数据:vcvarsall.bat所在路径 
注意:路径中不包含最后的反斜杠。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值