SWIG を使ってみよう! [第4回] Python 編 ― 2008年09月19日 06時12分45秒
SWIG を使って libnmz の様々な言語用のバインディングを作成してみましょう。
今回は UNIX 環境(Linux)で Python から libnmz の nmz_get_version を呼び出すことを考えます。
モジュール名は前回と同じ Sample とします。 SWIG 用インターフェイスファイルを Sample.i という名前で作成します。 中身は前回と全く同じです。
%module Sample %{ #include "namazu/libnamazu.h" %} char *nmz_get_version();
Sample モジュールを作成するために次の内容の setup.py ファイルを作成します。
#!/usr/local/bin/python from distutils.core import setup, Extension Sample_module = Extension('_Sample', sources=['Sample.i', ], library_dirs = ['/usr/local/lib'], libraries = ['nmz'], ) setup (name = 'Sample', version = '0.1', author = "teranishi", description = """Simple swig example""", ext_modules = [Sample_module], py_modules = ["Sample"], )
python コマンドで実行し、Sample モジュールを作成します。
$ python setup.py build_ext --inplace
Python バインディングの Sample モジュールが作成されました。
インストールして使うこともできますが、ここではカレントディレクトリに生成 したライブラリをそのまま使ってみましょう。
Sample モジュールを呼び出す Python プログラム を run.py という名前で作成します。
#!/usr/local/bin/pyton import Sample print Sample.nmz_get_version()
このプログラムは nmz_get_version の値を表示するだけの単純なプログラムです。 実行すると、Namazu のバージョンが表示されます。
$ python run.py 2.0.18
非常に簡単な例ですが、SWIG を使って libnmz を Python から利用する方法をしめしました。 モジュールの生成方法は各言語ごとに異なりますが、 Perl や Java の時に使っ たものと同じインタフェースファイルから作成できることが分かったかと思います。 他の言語でも同じように利用することができますので、いろいろと工夫してみてください。
[お断り]
- SWIG Version 1.3.36 を使用しました。
- Python 2.5.2 を使用しました。
- Namazu 2.0.18 を使用しました。
- libnmz は GPL ライセンスです。libnmz を動的であれ、静的であれリンクして使用するプログラムは GPL ライセンスと矛盾しないライセンスである必要があります。
- SWIG を用いて作成した Sample モジュールは libnmz をリンクしますので、GPL ラインセンスとして公開します。
- Sample モジュールは GPL ライセンスですので、Sample モジュールを利用するプログラムは GPL ライセンスと矛盾しないライセンスでなければなりません。ご注意ください。
最近のコメント