Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

SWIGを使用したPython用のC/C++のラッピング


Pythonで既存のCまたはC++機能をラップする方法は複数あります。このセクションでは、C /C++機能をSWIGでラップする方法を説明します。以下は、Pythonでc /c++機能をラップするための他のオプションです。

  • 手動ラッピング
  • pyrexを使用してCコードをラップします。
  • Ctypes
  • SIP
  • Pythonのブースト

SWIG(Simple Wrapper Interface Generator)は、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」windowsswigインストーラーを使用しています。次の場所からダウンロードできます:

https://www.swig.org/download.html

それとは別に、Windowsでswigプログラムを実行するには、「MicrosoftVisualStudio14.0」以降が必要になる場合があります。

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

  1. n番目のカタラン数のC/C ++プログラム?

    カタラン数は一連の数です。カタラン数は、さまざまなカウントの問題で発生する一連の自然数を形成します。多くの場合、再帰的に定義されたオブジェクトが関係します。 C n 長さ2nのディック言語の数です。ディックワードは、n個のXとn個のYで構成される文字列であり、文字列の最初のセグメントにXより多くのYが含まれることはありません。たとえば、次は長さ6のディック言語です XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY. 記号Xを開き括弧として、Yを閉じ括弧として再解釈します。C n 正しく一致するn組の括弧を含む式の数をカウントします ((()

  2. Pythonを使用したWebサイトブロッカー

    大規模なIT企業で働いている場合は、その2つのWebサイト、特にFacebook、YouTube、Instagramなどのソーシャルネットワーキングサイトがブロックされていることに気付くかもしれません。 サードパーティのアプリケーションを使用して特定のWebサイトをブロックする代わりに、選択したWebサイトをブロックする独自のカスタムアプリケーションを開発できます。PythonでWebサイトブロッカーを開発することもそれほど難しくありません。それが私たちがやろうとしていることです-私たちが望むウェブサイトをブロックするPythonスクリプトを開発します。 前提条件: Python3.xが