Cython 事始め
概要
- Cython の簡単な使い方
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 を使用してみる。問題なく使える??
- 型定義すると速くなるとのこと。今回はそのままの形で記述。
- 簡単な足し算、と入力値の表示。
#! -*- coding: utf-8 -*- c = 0 def add( a, b ) : global c c = a + b return c def printResult() : print c
- [2] setup.py を作成
- Cython のドキュメントに合ったものをほぼ丸写し。
#! -*- coding: utf-8 -*- 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) が両方通るみたい。
- 下記コマンドでエラー発生しなければ、OK。
- 下記コマンドで、上記 1) と 2) が両方通るみたい。
$ python setup.py build_ext --inplace
- [3] 確認
- 同ディレクトリ内で Python を起動し、読み込めることを確認。
- global に設定した c も問題なく使えた!!
- 同ディレクトリ内で Python を起動し、読み込めることを確認。
$ python >>> import calculate >>> calculate.add( 2, 3 ) 5 >>> calculate.printResult() 5 >>> calculate.add( 5, 10 ) 15 >>> calculate.printResult() 15