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所在路径
注意:路径中不包含最后的反斜杠。