23

I have an issue when i compile a PyQt code with pyinstaller.

I use this line to compile:

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

then I get this error message:

      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

The error message is not clear to me and I don't understand why this happens.

Is it possible that pyinstaller try to use a module which is not compatible? I use these in my 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

update

the issue printed in the console come directly after

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

So it should mean that the error is coming from zmq?

ymmx
  • 4,769
  • 5
  • 32
  • 64

8 Answers8

38

I found an answer on another forum. I change the line number 369 in the Python\Lib\site-packages\Pyinstaller\compat.py file:

out = out.decode(encoding)

to

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

or

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

Now I can compile my script without any issue. I still don't know why my issue happened in the first place but at least that compiles now.

DonQuiKong
  • 413
  • 4
  • 15
ymmx
  • 4,769
  • 5
  • 32
  • 64
10

The answer still works 2 years later BUT the line changed from 368 to 428.

Nexarius
  • 346
  • 4
  • 11
7

In the newest version (3.5) , the line moved slightly to 427.

The best thing to do is to search for

out = out.decode(encoding)

and replace it with

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

I don't understand why they do not fix this annoying problem!

Dr ALOUI
  • 331
  • 4
  • 8
1

Changing compat.py works for me: out = out.decode(encoding, "replace")

This is a known problem on pyinstaller and the developers are working on it. https://github.com/pyinstaller/pyinstaller/pull/3895

I hope this bug will solved on the next update.

droebi
  • 872
  • 1
  • 14
  • 27
0

The error is fixed since Version 4.0

pip install "pyinstaller>=4.0.0"
b0lle
  • 732
  • 6
  • 19
0

I faced this problem running under MSYS2. To fix that i copy the project folder from C:/Users/Χρήστος/Desktop to C:/Python/Scripts

then i run the pyinstaller command from MSYS2 terminal, and finally i run the executable the command prompt console.

The error was that in the first path there is "Χρήστος" (greek name), but in the second there isn't.

Note: I search for file compat.py in msys64 directory but i don't found it.

Chris P
  • 2,059
  • 4
  • 34
  • 68
0

Note necessarily the answer to this issue, but for others who might find this.

I've use TAB to auto complete my pyinstaller command and it defaulted to the .exe file in my root instead of the .py file.

Martin Cronje
  • 175
  • 1
  • 6
0

Change the encoding to UTF-8 in the .py file that has the issue or delete the character/s that don't belong to the UTF-8.

This can happen from copy/pasting text from other sources.

AlbertoC.
  • 3
  • 3
  • 1
    Is this an answer? If so is the answer just ***changed the encoding to UTF-8***. There seems to be a lot of unnecessary text so it's difficult to determine what your stating here. Please edit your answer to make it more clear what your attempting to convey. Also note line spacing can be achieved using `
    ` which would also help.
    – moken Aug 07 '23 at 04:48