UnicodeDecodeError: код utf-8 c не может декодировать байтовую ошибку при запуске pyinstaller, но работает с Pycharm - PullRequest
0 голосов
/ 04 августа 2020

У меня есть следующий код python, который работает, когда я запускаю его с помощью Pycharm:

def get_csv():  # Import data from a csv file
    global df
    import_file_path = filedialog.askopenfilename(filetypes=[("CSV file", '*.csv')])
    if not import_file_path:  # If user press cancel select path display error message
        tk.messagebox.showwarning(title="Error message", message="CSV file import aborted.")
    else:
        # print("CSV path :", import_file_path)
        with open(import_file_path, "rb") as csv_bin:  # automatic CSV encoding detection
            result = chardet.detect(csv_bin.read(10000))
            encode = result['encoding']
            # print("encoding :", encode)
        with open(import_file_path) as csv_file:
            reader = csv.reader(csv_file, delimiter=';')
            first_row = next(reader)
            num_cols = len(first_row)
            if num_cols > 445:
                df = pd.read_csv(import_file_path, sep=';', header=0, na_values=['#NV', ' '], decimal=',', encoding=encode)
                tk.messagebox.showinfo(title="Import success", message="CSV file import successful !")
                return df
            else:
                tk.messagebox.showwarning(title="Error message", message="CSV file not compatible")

Я использовал pyinstaller, чтобы получить EXE-файл, соответствующий моему python коду, но я получаю эта ошибка:

Exception in Tkinter callback
Traceback (most recent call last):
  File "tkinter\__init__.py", line 1702, in __call__
  File "import_CSV_python.py", line 30, in get_csv
  File "c:\users\cyrille\appdata\local\programs\python\python37-32\lib\codecs.py
", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 1759: inval
id start byte

У меня нет этой ошибки, когда я запускаю свой код python с помощью Pycharm. Работает правильно. На другой машине у меня не было проблем с pyinstaller для создания рабочего EXE из файла python.

Я использую эту команду для вызова pyinstaller и создания EXE.

pyinstaller --onefile import_CSV_python.py

Я поискал в Интернете и нашел некоторых людей, у которых была такая же ошибка, как и у меня, и их решение - изменение файла compat.py. Для меня это звучит сложно, и я полностью потерялся. Я заранее изо всех сил пытался иметь несколько работающий EXE, который отображал бы маленькое окно с кнопкой для запуска моих различных функций. На другом моем компьютере (в настоящее время я работаю в родительском доме с другой машины) запуск pyinstaller для получения рабочего EXE из файла python вообще не проблема, он отлично работает.

Изменить: я попытался заменить строку out = out.decode(encoding) в файле compat.py из пакета pyinstaller на out = out.decode(encoding, "replace") or out = out.decode(encoding, "ingore"), затем сохранил файл compat.py и снова сгенерировал EXE с помощью pyinstaller, но безрезультатно. У меня та же ошибка: utf8 не может декодировать

Edit2: Благодаря Джону Шакмейстеру я изменил эту строку

with open(import_file_path, encoding=encode) as csv_file:

Теперь она отлично работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...