Empaquetage et distribution¶
Wayward Crown propose deux méthodes d'empaquetage pour compiler le jeu en exécutables directement distribuables.
Comparaison des méthodes¶
| Élément | PyInstaller | Nuitka |
|---|---|---|
| Vitesse de compilation | Rapide (secondes à minutes) | Lente (5 à 15 minutes) |
| Vitesse d'exécution | Identique à Python | Légèrement plus rapide (+5 % à 30 %) |
| Protection du code source | .pyc peut être décompilé |
Compilé en C, extrêmement difficile à rétro-ingénierer |
| Taille de la distribution | Plus petite | Plus grande |
| Compilateur C requis | Non | Oui |
| Utilisation recommandée | Développement et tests | Versions de production |
Prérequis¶
pip install -r requirements.txt
python setup_ext.py build_ext --inplace # Produit game/_ccore.*.pyd
L'extension C doit être compilée en premier ; sinon le jeu utilisera un chemin Python pur (performances réduites).
PyInstaller¶
Installation¶
pip install pyinstaller
Commande de compilation¶
pyinstaller --noconfirm --clean --name WaywardCrown ^
--noconsole ^
--icon "assets/Icons/WaywardCrown.ico" ^
--add-data "assets;assets" ^
--add-data "game/content;game/content" ^
--add-data "game/lang;game/lang" ^
--add-data "plugins;plugins" ^
--add-data "campaigns;campaigns" ^
--add-data "maps;maps" ^
--add-data "steam_sdk;steam_sdk" ^
--add-data "THIRD_PARTY_LICENSES.md;." ^
--add-data "LGPL-3.0.txt;." ^
--add-data "GPL-3.0.txt;." ^
--add-binary "game/_ccore.cp314-win_amd64.pyd;game" ^
--hidden-import PySide6.QtWidgets ^
--hidden-import PySide6.QtCore ^
--hidden-import PySide6.QtGui ^
--hidden-import PySide6.QtOpenGLWidgets ^
--hidden-import PySide6.QtMultimedia ^
--hidden-import OpenGL.GL ^
main.py
Sortie¶
dist/WaywardCrown/
├── WaywardCrown.exe
└── _internal/
├── assets/
├── game/
│ ├── _ccore.cp314-win_amd64.pyd
│ ├── content/
│ └── lang/
├── campaigns/
├── maps/
└── plugins/
Nuitka¶
Installation¶
pip install nuitka zstandard ordered-set
Nécessite un compilateur C (Visual Studio Build Tools ou MinGW64).
Commande de compilation¶
python -m nuitka ^
--standalone ^
--plugin-enable=pyside6 ^
--include-data-dir=assets=assets ^
--include-data-dir=game/content=game/content ^
--include-data-dir=game/lang=game/lang ^
--include-data-dir=plugins=plugins ^
--include-data-dir=campaigns=campaigns ^
--include-data-dir=maps=maps ^
--include-data-dir=steam_sdk=steam_sdk ^
--include-data-files=steam_sdk/steam_api.dll=steam_sdk/steam_api.dll ^
--include-data-files=steam_sdk/win64/steam_api64.dll=steam_sdk/win64/steam_api64.dll ^
--include-data-files=game/_ccore.cp314-win_amd64.pyd=game/_ccore.cp314-win_amd64.pyd ^
--include-data-files=THIRD_PARTY_LICENSES.md=THIRD_PARTY_LICENSES.md ^
--include-data-files=LGPL-3.0.txt=LGPL-3.0.txt ^
--include-data-files=GPL-3.0.txt=GPL-3.0.txt ^
--include-qt-plugins=multimedia ^
--include-package=OpenGL ^
--include-module=PySide6.QtOpenGLWidgets ^
--include-module=PySide6.QtMultimedia ^
--windows-console-mode=disable ^
--windows-icon-from-ico=assets/Icons/WaywardCrown.ico ^
--output-filename=WaywardCrown.exe ^
--output-dir=dist ^
--lto=yes ^
--jobs=8 ^
main.py
Fichiers requis¶
| Type | Chemin | Description |
|---|---|---|
| Extension C | game/_ccore.cp3XX-*.pyd |
Accélération de base pour le pathfinding A*, le hachage spatial, etc. |
| Contenu du jeu | game/content/*.json |
Définitions des classes, ennemis et bâtiments |
| Packs de langue | game/lang/*.json |
Traductions en 15 langues |
| Ressources graphiques | assets/ |
Toutes les images, musiques et effets sonores |
| Campagnes | campaigns/ |
Campagne tutoriel intégrée |
| Cartes personnalisées | maps/ |
Cartes des utilisateurs |
| Plugins | plugins/ |
Extensions tierces |
| SDK Steam | steam_sdk/ |
DLL Steamworks |
| Licences | THIRD_PARTY_LICENSES.md etc. |
Documents de conformité LGPLv3 |
Version de Python
Le nom du fichier .pyd inclut la version de Python (ex. cp314). Après un changement de version de Python, vous devez recompiler l'extension C et mettre à jour le nom du fichier dans la commande de compilation.