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

时间:2017-12-07 10:31:08

标签: python pyqt5 pyinstaller

使用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?

6 个答案:

答案 0 :(得分:12)

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

out = out.decode(encoding)

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

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

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

答案 1 :(得分:2)

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

最好的办法是搜索

out = out.decode(encoding)

并用

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

更改compat.py对我有用: out = out.decode(编码,“替换”)

这是pyinstaller上的一个已知问题,开发人员正在对此进行处理。 https://github.com/pyinstaller/pyinstaller/pull/3895

我希望此错误将在下次更新中解决。

答案 4 :(得分:0)

自版本4.0起错误已修复

[XmlElement("status", Namespace = "example.org/ls")]
public string Status { get; set; }

[XmlElement("code", Namespace = "example.org/ls")]
public string Code { get; set; }

[XmlElement("message", Namespace = "example.org/ls")]
public string Message { get; set; }

答案 5 :(得分:0)

我在 MSYS2 下运行时遇到了这个问题。 为了解决这个问题,我将项目文件夹从 C:/Users/Χρήστος/Desktop 复制到 C:/Python/Scripts

然后我从 MSYS2 终端运行 pyinstaller 命令,最后我在命令提示符控制台运行可执行文件。

错误是在第一个路径中有“Χρήστος”(希腊名称),但在第二个路径中没有。

注意:我在 msys64 目录中搜索文件 compat.py 但我没有找到它。