Pythonコードをexe化

Python

Pythonのプログラムを作成した時に
配布先のPCにPythonがインストールされておらず
Pythonプログラムを実行できないことがあります。

その場合はPythonコードからexeファイルを作成して配布します。

Pythonのコードからexeファイルを作成するにはPyinstallerを使用します。

 

実行環境

Windows10 Home

Python 3.6.6  64bit または Anaconda Python 3.6 Version 64bit

2018/8/27時点では最新のPython3.7.0のpyinstallerで作成したexeは
正常に動作しません。
Python3.6を使用してください。

 

exeの作成手順

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

 

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

 

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

 

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

 

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

 

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になりました。

サイズが肥大化した場合は、配布方法について別途考慮する必要があります。

 

エラー対応方法

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

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

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

 

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

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

 

Why Do I get an ImportError when building a .exe with pyinstaller?
I just created a small GUI program that compiles and works fine in IPython, but when I try to export it to a .exe using pyinstaller it gives me an import error....

 

exeを実行するとFatal Python errorと表示される。

Python3.7の環境でPyinstallerを利用してexeを作成すると下記のエラーが発生します。

Fatal Python error: initfsencoding: unable to load the file system codec
zipimport.ZipImportError: can’t find module ‘encodings’

 

Python3.7ではexeが作成できないので、3.6以下の環境で
Pyinstallerを使用してexeを作成してください。

Error message using pyinstaller
I am trying to convert a script into an exe using pyinstaller and Python3.70 (on Windows 10) When I run the command pyinstaller --onefile myfile.py The prog...

コメント