120
136

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pythonスクリプトをexeに変換する(つまづきポイントまとめ)

Posted at

はじめに

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.PNG

1回目落ちました。
この問題を解決するためには、setuptoolsの更新が必要です。
参考:Pyinstaller compile to exe

# 解決策1
$ pip install --upgrade setuptools

これにより、AttributeErrorでは落ちなくなります。

その2「Cannot find existing PyQt5 plugin directories」

エラー3.PNG

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」

エラー5.PNG

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

120
136
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
120
136

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?