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 ライセンスと矛盾しないライセンスでなければなりません。ご注意ください。