今回はPythonでコンパイルをする方法について解説します。Pythonはインタプリタ型言語なのでコンパイルをする必要ありませんが、バイトコンパイルと呼ばれるコンパイルの方法があります。
Pythonについて解説している本やサイトでもコンパイルという言葉が出てきたら、それはバイトコンパイルのことかもしれません。
この記事では、
- コンパイルとは
- Pythonでよく使われる拡張子
などの基本的な内容から、
- バイトコンパイルをする意味
- バイトコンパイルをする方法
について、解説をしていきます。Pythonが動く基本的な部分を、ぜひ一緒に学習してみましょう!
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
コンパイルとは
まずはコンパイルとは何かについて知っておきましょう。コンパイルとは、人間が読めるようなプログラムをコンピュータが読めるような機械語に翻訳する作業のことです。
また、コンパイルをするためのソフトウェアを、コンパイラと呼びます。コンパイラ型言語には、CやC++などがあります。コンパイラ型言語はプログラムを書いたり、更新したりするたびにプログラムをコンパイラに通して機械語に翻訳をします。
一方、コンパイラが必要のない言語もあり、それらはインタプリタ型言語と呼ばれます。インタプリタ型言語にはPython、Perl、Rubyなどがあります。インタプリタ型言語は、実行するときに人間が書いたプログラムを一行ずつ翻訳していきます。
コンパイラ型言語は実行速度が早いけれどもバグを見つけるのが難しかったり、またインタプリタ型言語はその逆であったりとそれぞれにメリットやデメリットはあります。
ここまで読んでみて分かる通り、Pythonにはコンパイルという段階がありません。しかし、バイトコンパイルという方法で速度を向上させたりすることができます。
Pythonでよく使われる拡張子
バイトコンパイルについて学ぶ前に、Pythonでよく使われる拡張子について見てみましょう。Pythonでは、「.py」、「.pyc」ファイルをよく見かけます。
.pyファイルは、Pythonのコードを書いたファイルで、一番良く見かけるかもしれません。この.pyファイルを指定すると、書いたコードが実行されます。
.pycファイルはPythonでimportされたときに自動的に作られるPythonのコードになります。この.pycファイルはコンパイルされたPythonのコードです。
Pythonはインタプリタ型言語なので、「コンパイル?」と思った方もいるかもしれません。しかしこの.pycファイルが、バイトコンパイルされたファイルになります。
バイトコンパイルをする意味
ここで、バイトコンパイルをする意味について考えてみましょう。Pythonでコードを実行するときには、機械語に翻訳されて実行されます。ただ、毎回機械語に翻訳するすると無駄な部分まで翻訳されてしまいます。
そこで、.pycファイルを作っておいて、対応する.pyファイルが更新されるたびに.pycファイルを上書きして実行します。この.pycファイルがバイトコンパイルされたファイルになります。バイトコンパイルをすることで実行するまでの速度が速くなります。
あくまでも読み込んだり、実行するまでの速度が早くなるだけで、実行速度が早くなるというわけではありません。また、ファイルのやり取りでコードの中身を知られたくないときなども、この.pycファイルを渡せば実行はできてもコードの中身を見ることはできないファイルが出来上がります。
バイトコンパイルをする方法
ここからはバイトコンパイルをする方法について見てみましょう。バイトコンパイルは、Pythonのコードを実行するときにオプションをつけて実行することで.pycファイルを作ることができます。
今回はhello.pyというファイルのバイトコンパイルをしてみましょう。
python -m compileall xxxxx.py
バイトコンパイルを実行すると、__pycache__ディレクトリが作成され、.pycファイルが格納されます。
まとめ
今回は
- コンパイルについて
- Pythonの拡張子
- バイトコンパイル
について解説してきました。普段は考えずに実行していたPythonのコードでも、どのように実行されているかがわかると興味深いですね。
バイトコンパイルはあまり使う機会がありませんが、少しでもパフォーマンスをよくしてみたいときはぜひ使ってみてください。