Error when using pyinstaller: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff
Error when using pyinstaller: UnicodeDecodeError: 'utf-8' codec can'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?
我在另一个论坛上找到了答案。
我更改了 Python\Lib\site-packages\Pyinstaller\compat.py
文件中的行号 369:
out = out.decode(encoding)
到
out = out.decode(encoding, errors='ignore')
或
out = out.decode(encoding, "replace")
现在我可以毫无问题地编译我的脚本了。
我仍然不知道为什么我的问题首先会发生,但至少现在可以编译了。
更改 compat.py 对我有用:
out = out.decode(编码,"replace")
这是 pyinstaller 的一个已知问题,开发人员正在努力解决。
https://github.com/pyinstaller/pyinstaller/pull/3895
希望下次更新能解决这个bug。
答案在 2 年后仍然有效,但线路从 368 更改为 428。
在最新版本(3.5)中,该行略微移动到 427。
最好的办法是搜索
out = out.decode(encoding)
并将其替换为
out = out.decode(encoding, "replace")
我不明白他们为什么不解决这个烦人的问题!
自 4.0 版本以来错误已修复
pip install "pyinstaller>=4.0.0"
我在 MSYS2 下遇到了这个问题 运行ning。
为了解决这个问题,我将项目文件夹从 C:/Users/χρήστος/Desktop 复制到 C:/Python/Scripts
然后我 运行 来自 MSYS2 终端的 pyinstaller 命令,最后我 运行 命令提示符控制台的可执行文件。
错误是在第一条路径中有“Xρήστος”(希腊名字),但在第二条路径中没有。
注意:我在 msys64 目录中搜索文件 compat.py,但没有找到。
我在使用 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?
我在另一个论坛上找到了答案。
我更改了 Python\Lib\site-packages\Pyinstaller\compat.py
文件中的行号 369:
out = out.decode(encoding)
到
out = out.decode(encoding, errors='ignore')
或
out = out.decode(encoding, "replace")
现在我可以毫无问题地编译我的脚本了。 我仍然不知道为什么我的问题首先会发生,但至少现在可以编译了。
更改 compat.py 对我有用: out = out.decode(编码,"replace")
这是 pyinstaller 的一个已知问题,开发人员正在努力解决。 https://github.com/pyinstaller/pyinstaller/pull/3895
希望下次更新能解决这个bug。
答案在 2 年后仍然有效,但线路从 368 更改为 428。
在最新版本(3.5)中,该行略微移动到 427。
最好的办法是搜索
out = out.decode(encoding)
并将其替换为
out = out.decode(encoding, "replace")
我不明白他们为什么不解决这个烦人的问题!
自 4.0 版本以来错误已修复
pip install "pyinstaller>=4.0.0"
我在 MSYS2 下遇到了这个问题 运行ning。 为了解决这个问题,我将项目文件夹从 C:/Users/χρήστος/Desktop 复制到 C:/Python/Scripts
然后我 运行 来自 MSYS2 终端的 pyinstaller 命令,最后我 运行 命令提示符控制台的可执行文件。
错误是在第一条路径中有“Xρήστος”(希腊名字),但在第二条路径中没有。
注意:我在 msys64 目录中搜索文件 compat.py,但没有找到。