こんにちは、みやびのです。
今回は、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」ライブラリをインストールするだけで使用できるようになります。
1 | pip install cython |
既に旧バージョンのcythonライブラリを使っている場合はライブラリをアップデートしましょう。
1 | pip install --upgrade cython |
-Vオプションでバージョンが表示されていればOKです。
1 2 | >cython -V Cython version 0.29.14 |
cython及びcythonizeを使用したコンパイル方法
cythonコマンドとcythonizeコマンドを使うとPythonで書かれた「.pyxファイル」をC言語や実行ファイルにコンパイルすることができます。
オプションの指定方法によって段階的コンパイルしたり、一括で2段階のコンパイルをしたりなど柔軟なコンパイルが可能です。
cythonコマンドの使い方
cythonコマンドはPythonで記述した「.pyx」ファイルをC言語の「.c」ファイルに変換できるコマンドです。
以下のように指定します。
1 | cython helloWorld.pyx |
上記コマンドを実行すると以下のファイルが作成できます。
helloWorld.c
cythonizeコマンドの使い方
cythonizeもコンパイルを行うことができるコマンドです。2段階コンパイルもできます。
◆C言語へのコンパイル
オプションを指定しない場合、C言語へのコンパイルだけ行います。
1 | cythonize helloWorld.pyx |
◆C言語ファイルから実行ファイルへのコンパイル
C言語のファイルをPythonで実行できる「.soファイル(.pydファイル)」に変換する方法です。
※Windowsの場合は「.pydファイル」、Macの場合は「.soファイル」
-bオプションを指定すると「.c」ファイルを実行ファイルに変換できます。
1 | cythonize -b helloWorld.c |
◆2段階コンパイル
-iオプションを指定すると「.cファイル」にコンパイルした後、続けて「.soファイル(.pydファイル)」にコンパイルします。
実行例は以下の通り。
1 | cythonize -i helloWorld.pyx |
複数指定も可能です。
以下のようにアスタリスクで指定すると「helloWorld」と名のつく全ての「.pyx」ファイルをコンパイルすることができます。
1 | cythonize -i helloWorld* |
◆-aオプション
-aオプションを指定すると以下のHTMLファイルが作成されます。
helloWorld.html
HTMLファイルを開くとPythonコードとC言語の対応関係を見ることができます。
ちなみに元のコードは以下の通り。
1 2 | def say_hello_to(name): print("Hello %s!" % name) |
短いコードでも結構複雑なコードになりますね。
以上、cythonコマンド及びcythonizeコマンドの使い方でした。