使用pyinstaller时出错:UnicodeDecodeError:'utf-8'编解码器无法解码字节0xff

ymm*_*mmx 12 python pyinstaller pyqt5

当我使用pyinstaller编译PyQt代码时,我遇到了一个问题.

我用这行来编译:

c:\Anaconda3\Scripts\pyinstaller.exe -y -F --distpath="." MyQt.py
Run Code Online (Sandbox Code Playgroud)

然后我收到此错误消息:

      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
Run Code Online (Sandbox Code Playgroud)

我不清楚错误信息,我不明白为什么会这样.

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
Run Code Online (Sandbox Code Playgroud)

更新

控制台中打印的问题直接发生在

142859 INFO: Loading module hook "hook-zmq.py"...
Run Code Online (Sandbox Code Playgroud)

所以它应该意味着错误来自zmq?

ymm*_*mmx 22

我在另一个论坛上找到了答案.我更改了Python\Lib\site-packages\Pyinstaller\compat.py文件中的行号369 :

out = out.decode(encoding)
Run Code Online (Sandbox Code Playgroud)

out = out.decode(encoding, errors='ignore')
Run Code Online (Sandbox Code Playgroud)

要么

out = out.decode(encoding, "replace")
Run Code Online (Sandbox Code Playgroud)

现在我可以编译我的脚本而没有任何问题.我仍然不知道为什么我的问题首先发生,但至少现在编译.

  • @decadenza我昨天通过使用out = out.decode(encoding,“ replace”)而不是ignore修复了我的问题。 (3认同)

Nex*_*ius 10

2 年后答案仍然有效,但线路从 368 变为 428。


Dr *_*OUI 7

在最新版本 (3.5) 中,该行略微移动到 427。

最好的办法是搜索

out = out.decode(encoding)
Run Code Online (Sandbox Code Playgroud)

并将其替换为

out = out.decode(encoding, "replace")
Run Code Online (Sandbox Code Playgroud)

我不明白他们为什么不解决这个烦人的问题!