pythonスクリプトをwindowsプログラム化(exe化)できる?
pythonスクリプトをwindowsプログラム化する(exe化する)ことが可能です。ただし、pythonのバージョンや開発環境が異なるとexe化することができない場合があります。
pythonのexe化ライブラリ
pythonのexe化ライブラリとして、pyinstallerやcx_freezeなどがあります。pyinstallerを使ったexe化の例を見ていきましょう。
pyinstallerはpipコマンドでインストールできます。
$ pip install pyinstaller
exe化は、現在の実行環境から必要なものを取り込むため、そのままだと余分なモジュールを取り込んだり、環境依存がおこったりします。結果として、謎のクソデカexeが生成されたりするんですね。
そのため、まずはクリーンな仮想環境を作って、そこでexe化作業をおこないます。
仮想環境を構築すると、作成したexeファイルのサイズを最小限にできます。
仮想環境を構築するには、以下のコマンドを実行します。
``` python -m venv <仮想環境の名前> ```
仮想環境を構築したら、以下のコマンドを実行して仮想環境を有効にします。
source <仮想環境の名前>/bin/activate
exe化するスクリプトを用意します。hello.pyというファイル名で作成しました。
``` print("Hello World!") ```
下記のコマンドでpythonスクリプトをexe化することができます。
$ pyinstaller -F hello.py hello.py 151 INFO: PyInstaller: 3.3.1 154 INFO: Python: 3.7.3
上記を実行すると、pyinstallerがhello.pyをexe化し実行ファイルを生成します。
pythonをexe化できない・動かない
pythonをexe化できない・動かない場合、原因としては以下のようなものが考えられます。
・pythonのバージョンや開発環境が異なる
・ライブラリが足りない
・exe化するモジュールのバージョンの不一致
などです。
exeファイルを作成すると、Pythonのコアモジュールや外部モジュールが一緒にバイナリ化されてexeファイルになります。このため、外部モジュールを多くインストールしている状態でexeファイルを作成すると、必要ないライブラリまで取り込まれてexeファイルのサイズが大きくなります。
それだけならまだしも、実行時に使わないモジュールを要求するようになるんですね。これはウザい。
それを防ぐために、仮想環境を構築して、仮想環境内でインストールしたモジュールのみを対象にexeファイルにバイナリ化するんですね。仮想環境に、不要なモジュールをインストールしないようにすることで、exeファイルのサイズを小さくできます。
exe化すると速度はどうなる?
exe化するとpythonスクリプトの実行速度が向上します。特に以下のような処理は高速化が見込めます。
・大量のデータ処理
・複雑な数値計算
・画像処理
・機械学習モデルの推論
など。
クイックソートのような、forループしまくって多くの行を実行するようなタイプは高速化が見込めると考えてよいでしょう。
逆に、上記サンプルで使った「1行表示するだけのスクリプト」は、exe化してもしなくても一瞬で終了するためあまり意味がありません。
また、CPU密集型の処理(数値計算を行う処理など)では、pyinstallerを使っても、大幅な速度向上は見込めません。この場合、C言語などを用いて最適化を行うなどの対策が必要になります。また、並列処理を行う場合も、pyinstallerを使用しても期待できる効果は少ないでしょう。
pythonのexe化のまとめ
- Pythonスクリプトはpyinstallerでexe化ができる
- exe化する場合は、仮想環境を作って作業するとexeモジュールサイズを小さくできる
- 処理内容によって、exe化による速度向上の度合いは異なる。