Cython コードをビルドする

Python のコードと違い、Cython のコードを使うには、コンパイルする必要が あります。コンパイルには、二つのステージがあります:

  • まず、 .pyx ファイルを Cython で .c ファイルに変換します。 この中には、 Python の拡張モジュールのコードも入っています。
  • 上の .c ファイルを C コンパイラで .so ファイル (Windows の 場合には .pyd ファイル) にコンパイルします。生成したバイナリファ イルは、Python から直接 import できます。

Cython のコードをビルドする方法は、いくつかあります:

  • distutils 用の setup.py を書きます。
  • pyximport を使って Cython の .pyx ファイルを .py ファイ ルと同じように import します (distutils を使ってバックグラウンドで コンパイルが実行されます)。
  • コマンドラインユーティリティ cython を使って、 .pyx ファイ ルから .c ファイルを自分で生成し、次に .c ファイルを自分で 共有オブジェクトライブラリや .dll にコンパイルして、 Python か ら import できるようにします (主にデバッグや実験用で、この方法を取 ります)。
  • [Sage] のノートブック上で、 Cython コードをインラインで記述します。

今のところ、 Cython ファイルをビルドしたり配布したりするには、 distutils を使うのが最も一般的です。その他の方法は、リファレンスマニュ アルの ソースファイルとコンパイル の節に詳しく書いてあります。

distutils で Cython モジュールをビルドする

以下のような簡単な “hello world” スクリプトを hello.pyx に保存して いたとします:

def say_hello_to(name):
    print("Hello %s!" % name)

このモジュールをビルドするための setup.py スクリプトは以下のように 書けます:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = [Extension("hello", ["hello.pyx"])]

setup(
  name = 'Hello world app',
  cmdclass = {'build_ext': build_ext},
  ext_modules = ext_modules
)

モジュールをビルドするには、 python setup.py build_ext --inplace を実行します。ビルドが終わったら、 Python のインタプリタを起動して、 from hello import say_hello_to を実行し、 import した関数を使って みて、期待通りに動作しているか確認しましょう。

../../_images/sage.png

Sage のノートブックには、 Cython コードを透過的に編集・コンパイルす る機能があります。この機能を呼び出すには、セルの先頭で %cython とタイプして、Cython コードを評価します。 Cython セル中で定義した変 数や関数は、実行中のセッションにそのまま import されます。

[Sage]
  1. Stein et al., Sage Mathematics Software, http://sagemath.org

Table Of Contents

Previous topic

Cython のインストール

Next topic

静的型付けでコードを高速化する

This Page