首頁 > 後端開發 > C++ > 主體

使用SWIG將C/C++包裝為Python

王林
發布: 2023-08-25 20:25:10
轉載
1209 人瀏覽過

使用SWIG將C/C++包裝為Python

有多種方法可以將現有的 C 或 C 功能封裝在 Python 中。在本節中,我們將了解如何使用 SWIG 包裝 C/C 功能。以下是在 python 中包裝 C/C 功能的其他選項。

  • 手動包裝
  • 使用 Pyrex 包裝 C 程式碼。
  • Ctypes
  • SIP
  • Boost 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 程式碼的巨集語言,然後會為您選擇的語言吐出包裝程式碼。

安裝

我正在使用「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 < 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 介面檔是,

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, 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
登入後複製

以上是使用SWIG將C/C++包裝為Python的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!