Python Materials For Beginners
454 subscribers
39 photos
1 video
9 files
151 links
Download Telegram
Приклад збірки PyQt6 проєкту PyInstaller-ом.

Якщо Ви все-таки наважилися зібрати свій проєкт pyinstaller у exe пропоную розглянути приклад.
Як приклад будемо використовувати мій шаблон для PyQt6
Шаблон дуже простий - показує просте вікно.

Він має файли які задані відносними шляхами:
1️⃣ Одна з переваг Qt - використання файлів "форм" формату *.ui в даному випадку це - main_window.ui
2️⃣ 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