Błąd podczas korzystania z pyinstaller: UnicodeDecodeError:' utf-8 ' kodek nie może dekodować bajtu 0xFF

Mam problem podczas kompilacji kodu PyQt za pomocą pyinstallera.

Używam tej linii do kompilacji:

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

Potem pojawia się komunikat o błędzie:

      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

Komunikat o błędzie nie jest dla mnie jasny i nie rozumiem, dlaczego tak się dzieje.

Czy to możliwe, że pyinstaller spróbować użyć modułu, który nie jest kompatybilny? Używam ich w moim skrypcie:

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

Update

Problem wydrukowany w konsoli pojawia się bezpośrednio po

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

Więc powinno to oznaczać, że błąd pochodzi z zmq?

Author: ymmx, 2017-12-07

5 answers

Znalazłem odpowiedź na innym forum. Zmieniam numer linii 369 w pliku Python\Lib\site-packages\Pyinstaller\compat.py:

out = out.decode(encoding)

Do

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

Lub

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

Teraz mogę skompilować skrypt bez żadnego problemu. Nadal Nie wiem, dlaczego mój problem pojawił się w pierwszej kolejności, ale przynajmniej teraz to kompiluje.

 33
Author: ymmx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-10 12:57:53

Odpowiedź nadal działa 2 lata później, ale linia zmieniła się z 368 na 428.

 8
Author: Nexarius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-05 16:08:47

W najnowszej wersji (3.5) linia nieznacznie przesunęła się do 427.

Najlepszą rzeczą do zrobienia jest poszukiwanie

out = out.decode(encoding)

I zastąp go

out = out.decode(encoding, "replace")
Nie rozumiem, dlaczego nie rozwiązują tego irytującego problemu!
 6
Author: Dr ALOUI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-06 11:29:52

Zmiana compat.py działa dla mnie: out = out.decode (encoding, "replace")

Jest to znany problem na pyinstaller i deweloperzy pracują nad nim. https://github.com/pyinstaller/pyinstaller/pull/3895

Mam nadzieję, że ten błąd zostanie rozwiązany przy następnej aktualizacji.

 1
Author: droebi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-03 10:59:30

Błąd został naprawiony od wersji 4.0

pip install "pyinstaller>=4.0.0"
 1
Author: b0lle b,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-11 13:16:39