Собираем настольную версию игры
PyInstaller собирает игру в самостоятельный исполняемый файл — но только под ту операционную систему, на которой сам запущен.
Игрок, для которого вы делаете игру, почти никогда не станет устанавливать Python и
pip install pygame-ce только чтобы её запустить. Игру нужно
упаковать в исполняемый файл, который работает сам по себе.
PyInstaller
Один из самых распространённых инструментов для этого на десктопе —
PyInstaller: он анализирует вашу программу, находит все нужные
модули (включая сам Pygame) и собирает единый исполняемый файл вместе с интерпретатором
Python внутри — играть в такую игру можно без установленного Python на компьютере игрока.
pip install pyinstaller
pyinstaller --onefile --add-data "assets:assets" igra.py
--onefile собирает всё в один файл вместо папки с
зависимостями. --add-data явно указывает включить папку
assets в сборку — без этого флага PyInstaller упакует только
код, а изображения и звуки останутся снаружи готового файла.
"assets:assets") на всех операционных системах, включая Windows. В версиях до 6.0 разделитель зависел от системы, и на Windows нужно было писать точку с запятой: "assets;assets". Если вы работаете со старой закреплённой версией и сборка не находит ассеты — проверьте в первую очередь именно этот символ.Кроссплатформенность — с оговоркой
.exe для Windows, работая при этом на Linux, и наоборот. Для по-настоящему кроссплатформенного релиза нужен доступ к каждой из целевых операционных систем — либо напрямую, либо через виртуальную машину или облачный сервис сборки.Скрытые импорты
Pygame устроен так, что часть его модулей подключается не совсем обычным для Python
образом — PyInstaller иногда не находит их автоматическим анализом и упускает из сборки.
Если готовый исполняемый файл падает с ModuleNotFoundError,
хотя из исходного кода игра запускается нормально, обычно помогает явно указать такой модуль
через --hidden-import.
python igra.py и работающий собранный исполняемый файл — не одно и то же гарантированно: разница в путях к ассетам (раздел 20.19) и в скрытых импортах проявляется именно на этапе сборки. Всегда стоит один раз запустить готовый файл на чистом компьютере (или хотя бы из другой папки) перед тем, как считать релиз готовым.