Приклад збірки PyQt6 проєкту PyInstaller-ом.
Якщо Ви все-таки наважилися зібрати свій проєкт pyinstaller у exe пропоную розглянути приклад.
Як приклад будемо використовувати мій шаблон для PyQt6
Шаблон дуже простий - показує просте вікно.
Він має файли які задані відносними шляхами:
1️⃣ Одна з переваг Qt - використання файлів "форм" формату
2️⃣ icon.png це іконка у головному вікні, вона задана main_window.ui через дизайнер "форм" QtDesiginer
Напишемо pyinstaller_build.bat скрипт який буде займатись збіркою у exe
Як бачимо всі файли які використовуються програмою треба додавати опцією
Також сам exe файл може мати іконку для цього має бути використана опція
Опція
Опція
Опція
Але цього недостатньо, щоб наш додаток знаходив файли main_window.ui та icon.png при запуску треба змінювати робочу директорію (це треба робити на самому початку скрипта).
Атрибут _MEIPASS додається динамічно pyinstaller-ом - це тимчасова тека куди розпаковується проєкт
Без цієї вставки коду буде помилка про те, що вказані файли відсутні.
Також я додам скріншот з збіркою без опції
Додаткові файли будуть прикріплені у коментарях.
#PyInstaller #PyQt6
Якщо Ви все-таки наважилися зібрати свій проєкт pyinstaller у exe пропоную розглянути приклад.
Як приклад будемо використовувати мій шаблон для PyQt6
Шаблон дуже простий - показує просте вікно.
Він має файли які задані відносними шляхами:
1️⃣ Одна з переваг Qt - використання файлів "форм" формату
*.ui в даному випадку це - main_window.ui2️⃣ icon.png це іконка у головному вікні, вона задана main_window.ui через дизайнер "форм" QtDesiginer
Напишемо pyinstaller_build.bat скрипт який буде займатись збіркою у exe
SET SCRIPT_NAME=main.py
SET EXE_NAME=prog
.venv\Scripts\pyinstaller.exe ^
--add-data "main_window.ui;." ^
--add-data "icon.png;." ^
--icon "icon.ico" ^
--windowed ^
--onefile ^
--noupx ^
--name %EXE_NAME% ^
%SCRIPT_NAME%
pause
Як бачимо всі файли які використовуються програмою треба додавати опцією
--add-dataТакож сам exe файл може мати іконку для цього має бути використана опція
--icon але треба зауважити що формат іконки має бути саме .ico (png не підходить).Опція
--windowed саме для GUI застосунків щоб сховати вікно консолі. Опція
--onefile саме збірка у exeОпція
--noupx збирати без upx стиснення.Але цього недостатньо, щоб наш додаток знаходив файли main_window.ui та icon.png при запуску треба змінювати робочу директорію (це треба робити на самому початку скрипта).
try:
import os, sys
os.chdir(sys._MEIPASS)
print(f"{sys._MEIPASS=}")
except AttributeError:
pass
Атрибут _MEIPASS додається динамічно pyinstaller-ом - це тимчасова тека куди розпаковується проєкт
Без цієї вставки коду буде помилка про те, що вказані файли відсутні.
Також я додам скріншот з збіркою без опції
--windowed щоб можна було побачити як виглядає sys._MEIPASSДодаткові файли будуть прикріплені у коментарях.
#PyInstaller #PyQt6
👍4❤3