Задать вопрос

После сборки Python проекта pyinstaller – ошибка, проблема с файлами изображений. Как исправить?

Использую pyinstaller для сборки Python проекта в исполняемый файл. Проект c графическим интерфейсом Tkinter, в котором используются фалы изображений – иконки для кнопок, а так же иконка *.ico – для исполняемого файла.

Использую pyinstaller для сборки Python проекта в исполняемый файл.
pyinstaller --noconsole --icon=parser.ico index.py

При запуске полученного в результате сборки исполняемого файла получаю ошибку:
63636e1b124de307018529.jpeg

Судя по ошибке, проблема с файлами изображений, точнее путями к ним. Да и в папке DIST, с результатами сборки, файлы изображений отсутствуют. Полагаю в сборку они не попадают.

До сборки pyinstaller – скрипт отрабатывает успешно, сами файлы изображения в корне проекта, и используются в качестве иконок для кнопок так:

spoiler

folder_open = PhotoImage(file="folder-open.png")
tb1_btn_folder = ttk.Button(tab1, image=folder_open, width=20, command=open_folder)
tb1_btn_folder.place(x=462, y=129, anchor=NW)

trash = PhotoImage(file="trash-can.png")
tb1_btn_trash = ttk.Button(tab1, image=trash, width=20, command=clean_all)
tb1_btn_trash.place(x=495, y=129, anchor=NW)



Прошу подсказать о возможных причинах ошибок и как исправить.
  • Вопрос задан
  • 133 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@pASdfsa
Решение номер 1, сложнее.
Для добавления сторонних файлов используются следующие параметры:
--add-data - для добавления текстовых файлов данных;
--add-binary - для добавления бинарных данных.
Правило добавления: имя-файла;имя_папки
Например, если все дополнительные файлы лежат в папке models:
pyinstaller -F --add-data coco-dataset.labels;models --add-data yolov3-tiny.cfg;models --add-data yolov3-tiny.weights;models pine.py

А в в самом скрипте необходимо задать следующую функцию:
import os
import sys
def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    if getattr(sys, 'frozen', False):
        base_path = sys._MEIPASS
    else:
        base_path = os.getcwd()
    return os.path.join(base_path, relative_path)

Решение номер 2, легче.
Просто скинь в дерикторию там где exe, все ассеты(.mp3,.png,.rar и тд)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы