使用SWIG包装用于Python的C / C ++
有多种方法可以将现有的C或C++功能包装在Python中。在本节中,我们将看到如何使用SWIG包装C/C++功能。以下是在python中包装c/c++功能的其他选项。
手动包装
使用pyrex包装C代码。
C类型
啜
提升Python
SWIG(简单包装器接口生成器)能够用许多其他语言包装C代码,包括Perl,Python,PHP,Ruby,Tcl,C#,CommonLisp(CLISP,Allegro,CL,UFFI,CFFI),Java,Modula-3和OCAML。Swig还支持多种解释和编译的Scheme实现(例如Guile,MzScheme,Chicken)。
但是我们仅在这里讨论使用python的实现。
SWIG基本上是一种宏语言,包含C代码,然后将吐出包装程序代码供您选择的语言使用。
安装
我正在使用Windowsswig安装程序“swigwin-3.0.12”,您可以从以下位置下载它:
http://www.swig.org/download.html
除此之外,您可能需要“MicrosoftVisualStudio14.0”或更高版本才能在Windows中运行Swig程序。
为了说明swig的用法,假设我们有一些c函数,并且想将其添加到其他语言中,例如Tcl,Perl,Python(我正在与python交互),Java和C#。
我的c文件是example.c
#include "example.h"
int fact(int n) {
if (n < 0) { /* This should probably return an error, but this is simpler */
return 0;
}
if (n == 0) {
return 1;
} else {
/* testing for overflow would be a good idea here */
return n * fact(n-1);
}
}接口文件:
现在,如果您想将c文件添加到您的首选语言,则需要编写一个“接口文件”,它是SWIG的输入。我的example.c接口文件是,
例子
/* File: example.i */
%module example
%{
#define SWIG_FILE_WITH_INIT
#include "example.h"
%}
%include "example.h"头文件
我们已经将头文件包含在先前的示例文件中。所以这是我的头文件:
例子.h
int fact(int n);
设置文件:
from distutils.core import setup, Extension
example_module = Extension('_example',
sources=['example_wrap.c', 'example.c'],
)
setup (name = 'example',
version = '0.1',
author = "SWIG Docs",
description = """Simple swig example from docs""",
ext_modules = [example_module],
py_modules = ["example"],
)创建包装器
现在,我们将使用接口文件(example.i)创建python包装器。要为您的函数创建包装器,只需在CLI上运行以下命令。
>swig -python example.i
现在,如果您看到当前的工作目录,则将立即创建一个新文件。如果您将上述文件名用作我的文件名,则您的包装文件将为“example_wrap.c”,否则包装文件将被命名为
“Your_File_Name” + “_wrapper” + “Your_language_extension”
因此,如果您的示例文件是test.c,则包装文件将是“test_wrapper.c”。
建立扩展
>python setup.py build_ext running build_ext building '_example' extension creating build creating build\temp.win32-3.6 creating build\temp.win32-3.6\Release ….
就是这样,现在我们可以将c语言包装为python语言了。要对其进行检查,您可以直接运行或创建虚拟环境并单独运行。
C:\Users\rajesh>mkdir swigExample && cd swigExample C:\Users\rajesh\swigExample>virtualenv swigenv Using base prefix 'c:\\python\\python361' New python executable in C:\Users\rajesh\swigExample\swigenv\Scripts\python.exe Installing setuptools, pip, wheel...done. C:\Users\rajesh\swigExample>.\swigenv\Scripts\activate (swigenv) C:\Users\rajesh\swigExample>python
就这样,现在从您的文件导入功能运行它。
>>> from example import fact >>> fact(6) 720