使用SWIG来扩展Python

  • Post author:
  • Post category: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; i<n/2; ++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\中



版权声明:本文为qq_35616296原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。