Cython とは
- Python の記法ベースで書ける。
- コンパイラががんばって Cython コードを C/C++ コードに翻訳してくれるので、(Python と比べて) 実行が速い!!
- 位置的には Python と C/C++ の中間のイメージ。
- Python と C/C++ のコードをつなぐためにも利用できる。
インストール
- C コンパイラが必要。Linux だったら普通は既に入っている。入ってないならインストールする。
- Cython 自体もインストールする必要あり。
- pip or easy_install で入れることができる。
$ pip install cython
Cython コードのビルド
- 必要なファイル
- .pyx ファイル : Python っぽい、Cython の形式で書かれる。
- setup.py : .pyx ファイルをビルドするために必要なファイル。
- 生成されるファイル
- .c ファイル : .pyx を Cython が変換して作成される。
- .so ファイル : .c ファイルを C コンパイラでコンパイルして作成される。Python から直接 import 出来る。
- ビルド手順
- 1) .pyx を Cython で .c ファイルに変換する。
- 2) .c ファイルを C コンパイラでコンパイル。
例
- [1] .pyx ファイルを作成。
- 簡単な足し算、と入力値の表示。
- global を使用してみる。問題なく使える??
- 型定義すると速くなるとのこと。今回はそのままの形で記述。
c = 0
def add( a, b ) :
global c
c = a + b
return c
def printResult() :
print c
- [2] setup.py を作成
- Cython のドキュメントに合ったものをほぼ丸写し。
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [
Extension( "calculate", ["calculate.pyx"] ),
]
setup(
name = "Sample calculate app",
cmdclass = { "build_ext" : build_ext },
ext_modules = ext_modules,
)
- [2] コンパイル
- 下記コマンドで、上記 1) と 2) が両方通るみたい。
$ python setup.py build_ext --inplace
- [3] 確認
- 同ディレクトリ内で Python を起動し、読み込めることを確認。
- global に設定した c も問題なく使えた!!
$ python
>>> import calculate
>>> calculate.add( 2, 3 )
5
>>> calculate.printResult()
5
>>> calculate.add( 5, 10 )
15
>>> calculate.printResult()
15