既存の C または C の機能を Python でカプセル化する方法はたくさんあります。このセクションでは、SWIG を使用して C/C 機能をラップする方法を見ていきます。ここでは、Python で C/C 機能をラップするための他のオプションを示します。
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、チキン).
ただし、ここでは Python を使用した実装についてのみ説明します。
SWIG は基本的に、C コードを理解し、選択した言語のラッパー コードを吐き出すマクロ言語です。
私は「swigwin-3.0.12」Windows swig インストーラーを使用しています。
http://www.swig からダウンロードできます。 org/download.html
それに加えて、Windows で swig プログラムを実行するには、「Microsoft Visual Studio 14.0」以降も必要になる場合があります。
説明について swig を使用するとします。いくつかの C 関数があり、それらを Tcl、Perl、Python (Python と対話しています)、Java、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"
前のサンプル ファイルにヘッダー ファイルを含めました。これが私のヘッダー ファイルです:
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
これで完了です。ファイルから関数をインポートして実行します。
えええええ以上がSWIG を使用して C/C++ を Python にラップするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。