web-dev-qa-db-ja.com

pyinstallerの使用時のエラー:UnicodeDecodeError: 'utf-8' codec ca n't decode byte 0xff

PyinstallerでPyQtコードをコンパイルすると問題が発生します。

この行を使用してコンパイルします。

c:\Anaconda3\Scripts\pyinstaller.exe -y -F --distpath="." MyQt.py

次に、このエラーメッセージが表示されます:

      File "c:\anaconda36bis\lib\site-packages\PyInstaller\hooks\hook-zmq.py", line
18, in <module>
    hiddenimports.extend(collect_submodules('zmq.backend'))
  File "c:\anaconda36bis\lib\site-packages\PyInstaller\utils\hooks\__init__.py",
 line 619, in collect_submodules
    repr(pkg_dir), package))
  File "c:\anaconda36bis\lib\site-packages\PyInstaller\utils\hooks\__init__.py",
 line 90, in exec_statement
    return __exec_python_cmd(cmd)
  File "c:\anaconda36bis\lib\site-packages\PyInstaller\utils\hooks\__init__.py",
 line 77, in __exec_python_cmd
    txt = exec_python(*cmd, env=pp_env)
  File "c:\anaconda36bis\lib\site-packages\PyInstaller\compat.py", line 562, in
exec_python
    return exec_command(*cmdargs, **kwargs)
  File "c:\anaconda36bis\lib\site-packages\PyInstaller\compat.py", line 369, in
exec_command
    out = out.decode(encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 152: invali
d start byte

エラーメッセージは私には明確ではなく、なぜこれが起こるのかわかりません。

Pyinstallerが互換性のないモジュールを使用しようとする可能性はありますか?スクリプトでこれらを使用します。

# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
# from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import * 
import sys
import numpy as np
import matplotlib
matplotlib.use('Qt5Agg')
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as     FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as     NavigationToolbar
from scipy.ndimage import imread
from scipy.ndimage.morphology import binary_dilation
from scipy.optimize import curve_fit, leastsq

更新

コンソールに印刷された問題は、すぐ後に発生します

142859 INFO: Loading module hook "hook-zmq.py"...

だから、エラーはzmqから来ていることを意味するべきですか?

11
ymmx

別のフォーラムで答えを見つけました。 Python\Lib\site-packages\Pyinstaller\compat.pyファイルの行番号369を変更します。

out = out.decode(encoding)

out = out.decode(encoding, errors='ignore')

または

out = out.decode(encoding, "replace")

これで、問題なくスクリプトをコンパイルできます。私の問題が最初に起こった理由はまだわかりませんが、少なくとも今はコンパイルされています。

18
ymmx

Compat.pyを変更するとうまくいきます:out = out.decode(encoding、 "replace")

これはpyinstallerの既知の問題であり、開発者はそれに取り組んでいます。 https://github.com/pyinstaller/pyinstaller/pull/3895

このバグが次のアップデートで解決されることを願っています。

0
droebi