Rozdział 20 · Tworzenie gier z Pygame

Składanie wersji stołowej gry

PyInstaller buduje grę jako samodzielny plik wykonywalny, ale tylko dla systemu operacyjnego, na którym działa.

Gracz, dla którego tworzysz grę, prawie nigdy nie zainstaluje Python i pip install pygame-ce tylko po to, by ją zacząć. Gra musi być pakuj go do pliku wykonywalnego, który działa samodzielnie.

PyInstaller

Jednym z najczęściej używanych narzędzi na komputerze stacjonarnym jest PyInstaller: analizuje twój program, znajduje wszystko, co potrzebne (w tym sam Pygame) i składa pojedynczy plik wykonywalny wraz z interpreterem Python w środku – można grać w taką grę bez instalowania Python na komputerze gracza.

pyinstaller.txt
pip install pyinstaller
pyinstaller --onefile --add-data "assets:assets" igra.py

--onefile zbiera wszystko w jeden plik zamiast folderu z zależnościami. --add-data wyraźnie określa, aby dołączyć ten folder assets w zgromadzeniu – bez tej flagi PyInstaller tylko się zapakuje kod, a obrazy i dźwięki pozostaną poza gotowym plikiem.

Colon w --add-data
W obecnych wersjach PyInstaller źródło i miejsce docelowe są oddzielone dwukropkiem ("assets:assets") na wszystkich systemach operacyjnych, w tym Windows. W wersjach sprzed 6.0 separator był specyficzny dla systemu i Windows musiał być zapisywany średnikiem: "assets;assets". Jeśli pracujesz ze starą, przypiętą wersją i build nie znajduje zasobów, najpierw sprawdź ten symbol.

Platforma poprzeczna – z pewnym zastrzeżeniem

PyInstaller nie kompiluje krzyżowo
PyInstaller tworzy plik wykonywalny dla systemu operacyjnego, na którym działa – kompilacja dla Windows odbywa się na Windows, dla macOS – na macOS, dla Linux – na Linux. Nie wie, jak je zbudować .exe Windows podczas pracy na Linux i odwrotnie. Aby naprawdę wieloplatformowe wydanie było potrzebne dostęp do każdego z docelowych systemów operacyjnych, bezpośrednio lub przez maszynę wirtualną lub usługę chmurową.

Ukryte importy

Pygame zaprojektowany tak, że niektóre moduły są połączone w nietypowy sposób dla Python W ten sposób czasem PyInstaller nie znajduje ich automatycznie i pomija je w budowli. Jeśli gotowy plik wykonywalny zawiesza się z ModuleNotFoundError, Chociaż gra działa poprawnie z kodu źródłowego, zwykle pomaga jednoznaczne określenie takiego modułu via --hidden-import.

Sprawdź plik zbudowany, nie tylko kod źródłowy
Uruchamianie gry przy starcie przez python igra.py i działający build wykonywalny nie gwarantują, że to to samo: różnica w ścieżkach zasobów (sekcja 20.19) i ukrytych importach jest widoczna już na etapie budowania. Zawsze warto uruchomić gotowy plik raz na czystym komputerze (lub przynajmniej z innego folderu), zanim uznamy go za gotowy do wydania.