こんにちは、みやびのです。
今回は、Cythonのコンパイルコマンドであるcythonizeコマンド及びcythonコマンドについて紹介します。
cythonizeコマンド及びcythonコマンドは簡単にCythonのコンパイルができるコマンドです。
これまでCythonは「setup.py」ファイルが必要でしたが、上記2つのコマンドの登場により不要となりました。
これからはC言語とPythonをセットアップしておけばライブラリをインストールするだけで使えるようになります。
本記事の内容は以下の通り。
・cython及びcythonizeのコマンド導入方法
・cython及びcythonizeを使用したコンパイル方法
Cythonとは?>>Cython(サイソン)とは?Python+C言語で高速化しよう
cython及びcythonizeのコマンド導入方法
Cythonの導入手順と同じです。旧バージョンのcythonライブラリを使っている場合はアップデートしてください。
cython及びcythonizeを使う準備
まずは、前提条件としてPython及びC言語の動作環境のセットアップが必要です。
Pythonの始め方については「Pythonプログラミングの始め方まとめ」をお読みください。
C言語はgccコンパイラが必要です。Macには最初から入っていますが、Windowsはインストールする必要があります。
gccコンパイラは以下のページからダウンロードできます。
http://www.mingw.org/
Windowsでcythonコマンド及びcythonizeコマンドを使うためにはvisual Studioのインストールも必要です。
https://visualstudio.microsoft.com/ja/downloads/
cython及びcythonizeのセットアップ
cython及びcythonizeのコマンドは「cython」ライブラリをインストールするだけで使用できるようになります。
pip install cython
既に旧バージョンのcythonライブラリを使っている場合はライブラリをアップデートしましょう。
pip install --upgrade cython
-Vオプションでバージョンが表示されていればOKです。
>cython -V Cython version 0.29.14
cython及びcythonizeを使用したコンパイル方法
cythonコマンドとcythonizeコマンドを使うとPythonで書かれた「.pyxファイル」をC言語や実行ファイルにコンパイルすることができます。
オプションの指定方法によって段階的コンパイルしたり、一括で2段階のコンパイルをしたりなど柔軟なコンパイルが可能です。
cythonコマンドの使い方
cythonコマンドはPythonで記述した「.pyx」ファイルをC言語の「.c」ファイルに変換できるコマンドです。
以下のように指定します。
cython helloWorld.pyx
上記コマンドを実行すると以下のファイルが作成できます。
helloWorld.c
cythonizeコマンドの使い方
cythonizeもコンパイルを行うことができるコマンドです。2段階コンパイルもできます。
◆C言語へのコンパイル
オプションを指定しない場合、C言語へのコンパイルだけ行います。
cythonize helloWorld.pyx
◆C言語ファイルから実行ファイルへのコンパイル
C言語のファイルをPythonで実行できる「.soファイル(.pydファイル)」に変換する方法です。
※Windowsの場合は「.pydファイル」、Macの場合は「.soファイル」
-bオプションを指定すると「.c」ファイルを実行ファイルに変換できます。
cythonize -b helloWorld.c
◆2段階コンパイル
-iオプションを指定すると「.cファイル」にコンパイルした後、続けて「.soファイル(.pydファイル)」にコンパイルします。
実行例は以下の通り。
cythonize -i helloWorld.pyx
複数指定も可能です。
以下のようにアスタリスクで指定すると「helloWorld」と名のつく全ての「.pyx」ファイルをコンパイルすることができます。
cythonize -i helloWorld*
◆-aオプション
-aオプションを指定すると以下のHTMLファイルが作成されます。
helloWorld.html
HTMLファイルを開くとPythonコードとC言語の対応関係を見ることができます。
ちなみに元のコードは以下の通り。
def say_hello_to(name): print("Hello %s!" % name)
短いコードでも結構複雑なコードになりますね。
以上、cythonコマンド及びcythonizeコマンドの使い方でした。