SWIG を使ってみよう! [第4回] Python 編
2008-09-19


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 の時に使っ たものと同じインタフェースファイルから作成できることが分かったかと思います。 他の言語でも同じように利用することができますので、いろいろと工夫してみてください。

[お断り]

[開発]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット