好奇心の横断歩道を創る!

自分の思考をラバーダック・デバッグするためのブログ

Cython勉強の記録Part1

導入的な何か。

趣味で有性生殖の生物進化のシミュレーションをやってみようと思い、実際にPython3で書いてみた。一応それっぽいのが出来上がったのは良かったけれど、1世代分計算するのに1時間以上かかって進化どころの騒ぎじゃないという問題に直面してしまう。コドンを30000用意して、優性・劣性遺伝を計算して、環境への適応度を計算して、子供をつくる際はコドンを一定間隔でランダムに受け継いで、みたいなことをすると、結構時間がかかってしまった。

「どうやらそろそろ、巷で耳にする”高速化”なるものを勉強する機会なのかもしれない」

そう思って、ハイパフォーマンスPythonという本でCythonの勉強を始めた。Cythonというのは、Pythonコードをコンパイルして計算速度を上げることができるものらしい。まだなんのこっちゃ訳が分からん。コンパイルはわかるよ?一応c言語ちょっとだけやったことあるから。

ここから先は、ハイパフォーマンスPythonを教材にした、”高速化”の勉強過程で起こったトラブルとそれに対して起こしたアクションを少しだけ記録する。未来の自分が振り返ったときに進歩を実感できるようにね。進歩!なんと甘美な響きだろう!

ちなみに、Windows10のPCを使っていて、Pythonの環境はAnacondaにお世話になってます。

 

①.pyxファイル開けねーじゃん問題(解決済み。Cythonをインストールしました)

p134にて。とりあえず、本に書いてある通りにやってみようと思い、cythonfn.pyxなるファイルを作った。そして、保存した。それからもう一度開こうとしたところ、問題が発生。VScodeで開けない。何たることか。んで原因を探るべくOpera(最近のお気に入りブラウザ)で検索したら、素敵な記事を発見。先人の知恵って素晴らしい。とてもとても助かります。毎日3度のお祈りを捧げたくなる気分。

qiita.com

どうやら未だcythonをインストールしてなかったらしい。標準でついてきてるものだとばかり思っていたので。恥ずかしス。

Anaconda Promptで

$ pip install cython

を入力して、Cythonをインストールした後、cythonfn.pyxを開こうとしたら、今度はちゃんとVScodeで開けた。よかったぁ。

 

②テキスト着色してくれない問題(解決済み。VScode拡張機能?みたいなのをインストールしました)

①解決後、VScodecythonfn.pywを開いたはいいものの、今度はテキストが色分けされない。いや別に黒地に白のアルファベットでもいいんだけど、やっぱり色がついてる方が断然読みやすい。ムショクは悲しい。だから、色を付けるべく頑張った。

具体的な解決方法ですが、VScodeを開いた状態で左端に4つアイコンが並んでいるわけですが、その一番下の四角形が4つ重なったようなやつをクリック。(EXTENSIONS: MARKETPLACEというところみたいですね。)そして、出現した検索ボックスみたいなところにCython と打つと、Cythonって項目がヒットしました。Installボタンがあったのでそれを押してみると、cythonfn.pyw のテキストが着色されました。

ps.ついでに、Language-Cythonという項目もインストールしときました。エラーを見つけやすくするとかそんなんじゃないかなーなんて想像。知らんけど。

 

 

 

おまけ的なもの。

道草食ってたときに発生した、とあるコンパイルに関する問題

py_compileでPythonファイルをコンパイルする方法をどこかで見つけた。また使いたくなるかもしれないけど、絶対にそのころには忘れているので、メモ

1, .pyファイルがあるディレクトリに移動。

 

2, pythonを実行し、

 >>> import py_compile

 >>> py_compile.compile("ファイル名.py")
 '__pycache__\\ファイル名.cpython-36.pyc' (紫色の部分は出力。)
 >>> quit()

 

3, __pycache__なるディレクトリができているのでそこに移動

 

4, ファイル名.cpython-36.pyc がある。

 $ python ファイル名.cpython-36.pycで実行。

 

(その他)

 自分で作ったモジュールをインポートするファイルをコンパイルして実行すると、そんなモジュールは存在しません的なエラーが出る。理由不明。

上の手順で例の有性生殖進化のやつをコンパイルして実行したのだけど、特に速くなった印象はない。

 

以上。続編はいつになるかさっぱりわからん。