メインコンテンツへスキップ
Pythonコードをexe化

Pythonコードをexe化

·4 分
Programming Python
かずさプログラマー
著者
かずさプログラマー
業務の作業自動化を行っています。Go、VBA、Pythonを主に使用しています。過去にはC#、VB.Net、JavaScriptも使用していました。
目次

Pythonのプログラムを作成した時に配布先のPCにPythonがインストールされておらず、Pythonプログラムを実行できないことがあります。 その場合はPythonコードからexeファイルを作成して配布します。 Pythonのコードからexeファイルを作成するには Pyinstaller を使用します。

実行環境
#

  • Windows10 Home
  • Python 3.6.6  64bit または Anaconda Python 3.6 Version 64bit
Python3.7.2のPyinstallerで作成したexeファイルが正常に動作することを確認しました。(2019/1/11確認)

exeの作成手順
#

pipを利用してpyinstallerをインストールします。
コマンドプロンプトまたはAnaconda Promptを起動し、下記のコマンドを入力します。

pip install pyinstaller

C:\exetestにexetest.pyを置きました。

exetest.pyの内容は以下になります。
メッセージを表示後、Enterを押すと実行を終了します。

print("exe化テスト!")
input("画面を閉じるにはEnterを押してください。")

コードを置いたフォルダに移動します。

cd C:\exetest

pyinstallerで対象のコードをexe化します。

pyinstaller exetest.py --onefile
onefileオプションをつけることによって配布ファイルを1つにまとめることができます。
配布が簡単になるのでonefileオプションをつけましょう。

onefileオプションあり

onefileオプションなし

今回のコードは小さいのでexe化処理はすぐに完了します。
コードのサイズが大きい場合、exe作成処理に数分かかることがあります。

exe化の処理が完了すると、C:\exetestにdistフォルダが作成されます。
distフォルダ内にexetest.exeが作成されます。

exetest.exeをダブルクリックで実行すると、exetest.pyのコードが実行されます。

Pyinstallerからexeを作成するメリット
#

Pyinstallerを使用すると簡単にpythonのコードからexeファイルを作成できます。
Pythonをインストールできない環境でも、Pythonプログラムを動かすことができます。

Pyinstallerからexeを作成するデメリット
#

exeの容量がソースコードに比べて、かなり大きくなります。
テストで使用したコードは1KBでしたが、exeは6MBになりました。

importしているパッケージによっては、さらにサイズが大きくなります。
pandasとscikit-learnを利用したコードをexe化したときはexeのサイズが約90MBになりました。 サイズが肥大化した場合は、配布方法について別途考慮する必要があります。

実行ファイルのサイズ肥大化の対処方法
#

Intel MKLライブラリを含むときはvenvを使用してみる
#

Anacondaの仮想環境でPyinstallerを使用した場合、importしたパッケージとコードの内容によってはIntel MKLライブラリを含みます。

Pyinstallerでonefileオプションを付けないでexeファイルを作成すると distフォルダでIntel MKLライブラリを含んでいるか確認できます。

性能が良いのですがサイズが大きいです。

処理速度よりも、とりあえず容量を削減したいときはvenvで仮想環境を構築します。
venvの仮想環境のPyinstallerでexeを作成すると、Intel MKLライブラリを含まないexeを作成できます。

venvの使用方法は下記のページが分かりやすいです。

エラー対応方法
#

Please install PyWin32 or pywin32-ctypesと表示される
#

PyInstaller cannot check for assembly dependencies.
Please install PyWin32 or pywin32-ctypes.

上記のように表示される場合は、下記のコマンドを入力してPyWin32をインストール後pyisntallerでコードをexe化します。

pip install pypiwin32

ImportError: No module named typedefsと表示される
#

scikit-learnを利用したコードをexe化するとImportError: No module named typedefsと表示されることがあります。 pyinstallerで下記のオプションをつけてexe化します。

--hidden-import sklearn.neighbors.typedefs

関連記事

【VBA】n日後の営業日を求める
·2 分
Programming VBA
VBAで休日・祝日を判定する
·5 分
Programming VBA
【VBA】項目ごとのカウントを行う
··2 分
Programming VBA