有多种方法可以将现有的 C 或 C++ 功能封装在 Python 中。在本节中,我们将了解如何使用 SWIG 包装 C/C++ 功能。以下是在 python 中包装 C/C++ 功能的其他选项。
手动包装使用 Pyrex 包装 C 代码。CtypesSIPBoost Python
SWIG(简单包装接口生成器)能够使用许多其他语言(包括 Perl、 Python、PHP、Ruby、Tcl、C#、Common Lisp(CLISP、Allegro、CL、UFFI、CFFI)、Java、Modula-3 和 OCAML。 Swig 还支持多种解释和编译的Scheme 实现(如 Guile、MzScheme、Chicken)。
但我们将在这里仅讨论其使用 python 的实现。
SWIG 基本上是一个理解 C 代码的宏语言,然后会为您选择的语言吐出包装器代码。
立即学习“Python免费学习笔记(深入)”;
安装
我正在使用“swigwin-3.0.12”windows swig 安装程序,您可以从以下位置下载:
http://www.swig.org/download.html
除此之外,您可能还需要“Microsoft Visual Studio 14.0”或更高版本,在 Windows 中运行 swig 程序。
为了说明 swig 的使用,假设我们有一些 c 函数,并且我们想将其添加到其他语言,如 Tcl、Perl、Python(我是与 python 交互)、Java 和 C#。
我的 c 文件是 example.c
#include "example.h"int fact(int n) { if (n接口文件:
现在,如果您想将 c 文件添加到您的首选语言,您需要编写一个“接口文件”,它是 SWIG 的输入。我的 example.c 接口文件是,
example.i
/* File: example.i */%module example%{ #define SWIG_FILE_WITH_INIT #include "example.h"%}%include "example.h"登录后复制
头文件
我们已经在之前的示例文件中包含了头文件。这是我的头文件:
example.h
int fact(int n);登录后复制
安装文件:
from distutils.core import setup, Extensionexample_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_extrunning build_extbuilding '_example' extensioncreating buildcreating buildemp.win32-3.6creating buildemp.win32-3.6Release….登录后复制
那就是现在我们可以将C语言封装到Python语言中了。要检查它,您可以直接运行或创建一个虚拟环境并分开运行。
C:Usersajesh>mkdir swigExample && cd swigExampleC:UsersajeshswigExample>virtualenv swigenvUsing base prefix 'c:pythonpython361'New python executable in C:UsersajeshswigExampleswigenvScriptspython.exeInstalling setuptools, pip, wheel...done.C:UsersajeshswigExample>.swigenvScriptsctivate(swigenv) C:UsersajeshswigExample>python登录后复制
就是这样,现在从文件导入函数并运行它。
>>> from example import fact>>> fact(6)720登录后复制
以上就是使用SWIG将C/C++包装为Python的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2587724.html