PyInstallerのエラー発生状況のまとめ

PyInstallerを使って、PythonスクリプトWindowsでの実行用にexe化しているが、自分の環境ではバージョンによってエラーになったり(exe化に失敗する)ならなかったり(exeファイルが作成される)する。エラーの原因や解決方法は現時点で不明だが、今後同じことが起こることが予想されるため、症状と推奨される実行条件をまとめておく。

実行環境

Windows 7で動作しているPythonスクリプトから、Windows 7用のexeファイルを作成する

試したバージョン

Python 2.7.10で動作するPyInstaller 2.1 & 3.0

Pythonスクリプト

exe化するPythonスクリプトは2種類ある。一つは内部でmatplotライブラリを使用しているもの(matplotあり、と略記)、もう一つは全くmatplotライブラリは使用しないもの(matplot無し、と略記)

実行方法

PyInstallerは、コマンドプロンプトから実行できるよう設定を終えているものとする。exe化するPythonスクリプトをtest.pyとすると、コマンドプロンプトから、

> pyinstaller --onefile test.py

を実行して、exeファイルを作成する。「--onefile」オプションは、本来作られうる複数の派生ファイルをまとめて一つのexeファイルを生成したいときに付ける。付けなくてもexeファイルを作ることはできるが、たくさんのdllやpydファイルも作成され、それらを一緒に置いておかないとexeは実行できない。

実行結果

PyInstallerによるexeファイルの作成結果(コマンドプロンプトでのpyinstallerコマンドの実行結果)は以下の通り
PyInstaller-2.1の場合

  • matplotあり、のスクリプトは、「onefile」オプションを付けるとエラーになり作成できない。「onefile」オプションを付けないと作成できる
  • matplot無し、のスクリプトは、「onefile」オプションを付けるとエラーになり作成できない。「onefile」オプションを付けないと作成できる


▲「onefile」オプションを付加した際に生じるエラーメッセージ

PyInstaller-3.0の場合

  • matplotあり、のスクリプトは、オプションの有り無しに関係なくエラーとなる。
  • matplot無し、のスクリプトは、どのような場合でも問題なく作成できる


▲matplotあり、の場合エラーとなる

結論(今後の対応)

現時点では、matplotありのスクリプトを変換するときには、PyInstaller-2.1を使って「onefile」オプション無しの指定を行う。matplot無しのスクリプトを変換するときには、PyInstaller-3.0を使うと「onefile」オプションが使えるので便利。