はじめに
pythonスクリプトをExeファイルに変換しようとした時に、いくつか、つまずいた点があったので、解決策を共有します。
OSは、Windows10
Pythonは、Anacondaでインストールした 3.6.4です。
pythonスクリプトをExeファイルに変換する意味
pythonスクリプトをExeファイルに変換することには、
以下の意味があります。
- pythonをインストールしていないPCでも実行できるようになる
- pythonスクリプトの中身を隠すことができる
一般的に紹介されている方法
py2exeを利用するか、pyinstallerを利用するかの選択肢があります。
基本的にどちらも若干面倒ですが、今回はpyinstallerを利用する方法を紹介します。
①pipで、pyinstallerをインストールする
$ pip install pyinstaller
簡単にインストールできます。
②pyinstallerでpythonスクリプトをexeファイルにする
$ pyinstaller ○○.py --onefile
一つのexeファイルにまとめるために「--onefile」をオプションで指定します。
本当であれば、これで終了!
なのですが、pythonスクリプトをexe化する場合、大体色々怒られるので、ここからが勝負です。
以降で、私がつまずいた点を共有したいと思います。
exeに変換する上でつまずくポイント
その1「AttributeError: 'str' object has no attribute 'items'」
1回目落ちました。
この問題を解決するためには、setuptoolsの更新が必要です。
参考:Pyinstaller compile to exe
# 解決策1
$ pip install --upgrade setuptools
これにより、AttributeErrorでは落ちなくなります。
その2「Cannot find existing PyQt5 plugin directories」
2回目落ちました。
この問題を解決するためには、PyQt5をインストールする必要があります。
参考:Exception: Cannot find PyQt5 plugin directories when using Pyinstaller despite PyQt5 not even being used
# 解決策2
$ pip install PyQt5
これにより、PyQt5が見つからないという理由では落ちなくなります。
その3「UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 130: invalid start byte」
3回目落ちました。
python2系で頻出の、UnicodeDecodeErrorです。(環境は3.6.4ですが)
この問題を解決するためには、compat.pyを書き換える必要があります。
(もっと良い解決策ないのかな。。)
参考:Error when using pyinstaller: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff
# 解決策3
# この場合は、370行目を書き換え
# out = out.decode(encoding)
out = out.decode(encoding, errors='ignore')
エラーをignoreします(強引)。
これにより、UnicodeDecodeErrorで落ちなくなります。
そして、これで無事動くようになりました!
548794 INFO: Building EXE from EXE-00.toc completed successfully. # 正常完了
最後に
些細な事で、つまずくケースは結構多いと思います。(この記事書くためのデバックで2時間かかった。。)
今回の解決策は一例ですが、pythonスクリプトをexeファイルする際の参考にして頂けると嬉しいです。
参考
PythonスクリプトをWindows環境で動くexeファイルにしよう!
Pyinstaller compile to exe
Exception: Cannot find PyQt5 plugin directories when using Pyinstaller despite PyQt5 not even being used
Error when using pyinstaller: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff