使用SWIG来扩展Python

一、在Windows上安装SWIG:
1.下载swigwin :http://www.swig.org/download.html (是swigwin不是swig,不然要自己手动搞swig.exe)
2.解压缩包swigwin-3.0.12.zip 至指定目录 (这里假设是D:\swig)
3.配置环境变量(假设python的安装目录为E:\python):
新建PYTHON_INCLUDE 路径为E:\Python\include
新建PYTHON_LIB 路径为E:\Python\libs\python36.lib
修改系统环境变量path 增加一个 D:\swig\swigwin-3.0.12\
注:如果扩展其他语言,套路也类似(swig文档):
4.打开命令行 输入 swig –help 检查是否成功

二、使用swig扩展python:
假设这里扩展的是C语言, (使用C语言写一个判断回文数的函数)
总共需要写3个文件分别是:palindrome.c palindrome.h palindrome.i

1、palindrome.c:

# include <string.h>
int is_palindrome(char * text){
    int n = strlen(text);
    for ( int i=0; i2; ++i ){
        if ( text[i]!=text[n-i-1] ) 
            return 0;
    }
    return 1;
} 

2、palindrome.h:

int is_palindrome(char * text);

3、palindrome.i:

%module palindrome

%{
#include <string.h>
%}

extern int is_palindrome(char * text);

然后命令行执行 swig -python palindrome.i , 会在工作目录生成一个 palindrome_wrap.c 和 palindrome.py (名字是%module后面的)

如果是扩展C++ 则再加一个-c++ 即 swig -c++ -python palindrome.i

接着利用distutils生成动态库

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

setup.py:

from distutils.core import setup, Extension


palindrome_module = Extension('_palindrome',
                           sources=['palindrome_wrap.c', 'palindrome.c'],
                           )

setup (name = 'palindrome',
       version = '0.1',
       author      = "SWIG Docs",
       description = """Simple swig example from docs""",
       ext_modules = [palindrome_module],
       py_modules = ["palindrome"],
       )

最后在命令行
python setup.py build 会在工作目录生成一个build目录 ,可用的palindrome.py就在..\build\lib\中

你可能感兴趣的:(使用SWIG来扩展Python)