web-dev-qa-db-fra.com

Erreur lors de l'utilisation de pyinstaller: UnicodeDecodeError: le codec 'utf-8' ne peut pas décoder l'octet 0xff

J'ai un problème lorsque je compile un code PyQt avec pyinstaller.

J'utilise cette ligne pour compiler:

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

alors je reçois ce message d'erreur:

      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

Le message d'erreur n'est pas clair pour moi et je ne comprends pas pourquoi cela se produit.

Est-il possible que pyinstaller essaie d'utiliser un module qui n'est pas compatible? Je les utilise dans mon script:

# -*- 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

mise à jour

le problème imprimé dans la console vient directement après

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

Cela devrait donc signifier que l'erreur vient de zmq?

11
ymmx

J'ai trouvé une réponse sur un autre forum. Je change le numéro de ligne 369 dans le Python\Lib\site-packages\Pyinstaller\compat.py fichier:

out = out.decode(encoding)

à

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

ou

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

Maintenant, je peux compiler mon script sans aucun problème. Je ne sais toujours pas pourquoi mon problème s'est produit en premier lieu, mais au moins cela se compile maintenant.

18
ymmx

Changer compat.py fonctionne pour moi: out = out.decode (encodage, "replace")

Il s'agit d'un problème connu sur pyinstaller et les développeurs y travaillent. https://github.com/pyinstaller/pyinstaller/pull/3895

J'espère que ce bug sera résolu lors de la prochaine mise à jour.

0
droebi