« ウインドウズ用のPythonモデュールのインストーラーがたくさんあるサイト | トップページ | 論文中のギリシャ文字など特殊文字のインサート »

2011年7月 7日 (木)

意外に簡単。Cythonのインストール・使い方覚書

CythonはPythonで書いた関数をCにコンパイルして、CエクステンションとしてPythonで利用できるというツール。コンパイルとかCエクステンションとか難しそうで敬遠していたが、やってみたら意外に簡単だ。極端な場合は100倍はやくなったりする。Pypyと違ってNumpyがすでにサポートされているし、PypyやShed Skinにくらべてほとんど使える関数に制限がないのが魅力。

(追記。Numpyをやり取りするCエクステンションのひな形も合わせて読むと吉かもしれません。)

ここを参考にインストール。Christoph Gohlkeさんのとこからバイナリインストーラーをもってくるのが一番速いけど、今回はなんとなく自分でビルドしてみた。

MinGWをインストール 最低gccとg++にチェック。
c:\mingw\binを環境変数Pathに追加。
distutilsがMinGWを使うように設定するため
[build]
compiler = mingw32
という内容でC\Python26\Lib\distutilにdistutils.cfgという名前で保存。
これでいちいちpython setup.py build --compiler==mingw32をする必要もなくなっていきなりpython setup.py installでよくなる。
Python26のところはバージョンに合わせて変えてください。

http://cython.org/release/から最新版を落とす。今回使ったのは0.14.1でした。

フツーに解凍してpython setup.py installでOK。pyximportが同梱されているのでpyxのC/C++へのコンパイルとCエクステンションの生成は自動化できる。

使い方はCythonでつくったモジュールをインポートするまえに
import pyximport
pyximport.install()
と書くだけでいい。コンパイルされたものは
C:\Users\ユーザー名\.pyxbld
のなかに出来ているはず。

うまくいかない場合、とくにXPではここにあるように
さらにpydistutils.cfgというファイルを
C:\Documents and Settings\ユーザー名\
につくってまたもや
[build]
compiler = mingw32
という内容で保存しないとだめだった。なぜかWindows 7だと必要なかったが。

完了!
テストしてみる。Robert Bradshawさんのスライドにある例をつかってみる。スライドのなかではcdef longとしていたが例にあるようにNが10の7乗とか大きいと振りきれるのでlong longにした。

def mysum(long N):
    cdef long long k,s = 0
    for k from 0 <= k < N:
        s += k
    return s

これをmycython.pyxという名前で保存。
これと同じフォルダーに

import pyximport
pyximport.install()
import mycython

N = 1e7
print mycython.mysum(N)

という内容でtest.pyとでもして記録、実行。一回目はコンパイルがはいる。
49999995000000
がでたら成功。

ちなみにすべてPythonで同じことをやるともちろん遅い。

def purepy_sum(N):
    s = 0
    for k in range(N):
        s += k
    return s

手元のパソコンでは、6-7秒かかったが、Cythonだと0.06秒で100倍早くなった。

« ウインドウズ用のPythonモデュールのインストーラーがたくさんあるサイト | トップページ | 論文中のギリシャ文字など特殊文字のインサート »

Python」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1169291/40705535

この記事へのトラックバック一覧です: 意外に簡単。Cythonのインストール・使い方覚書:

« ウインドウズ用のPythonモデュールのインストーラーがたくさんあるサイト | トップページ | 論文中のギリシャ文字など特殊文字のインサート »

広告欄


やっつけタイムライン

広告欄

はてブ

人目の訪問です。

  • follow us in feedly

    かなり更新が不定期なため、RSSリーダーをオススメします。現在Feedlyに122人登録頂いています。多謝!RSSを表示

    ブログランキング用 にほんブログ村 IT技術ブログ Pythonへ ブログランキングならblogram






    Jenny Mayhem
2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

IT技術注目記事

無料ブログはココログ