패키징 및 배포¶
웨이워드 크라운은 게임을 바로 배포 가능한 실행 파일로 컴파일하는 두 가지 패키징 방법을 제공합니다.
방법 비교¶
| 항목 | PyInstaller | Nuitka |
|---|---|---|
| 빌드 속도 | 빠름 (수초~수분) | 느림 (5~15분) |
| 실행 속도 | Python과 동일 | 약간 더 빠름 (+5%~30%) |
| 소스 코드 보호 | .pyc 디컴파일 가능 |
C로 컴파일, 역공학 매우 어려움 |
| 배포 크기 | 작음 | 큼 |
| C 컴파일러 필요 | 아니오 | 예 |
| 권장 용도 | 개발 및 테스트 | 프로덕션 릴리스 |
사전 준비¶
pip install -r requirements.txt
python setup_ext.py build_ext --inplace # game/_ccore.*.pyd 생성
C 확장을 먼저 컴파일해야 합니다. 그렇지 않으면 게임이 순수 Python 경로로 대체되어 성능이 저하됩니다.
PyInstaller¶
설치¶
pip install pyinstaller
빌드 명령¶
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
출력¶
dist/WaywardCrown/
├── WaywardCrown.exe
└── _internal/
├── assets/
├── game/
│ ├── _ccore.cp314-win_amd64.pyd
│ ├── content/
│ └── lang/
├── campaigns/
├── maps/
└── plugins/
Nuitka¶
설치¶
pip install nuitka zstandard ordered-set
C 컴파일러(Visual Studio Build Tools 또는 MinGW64)가 필요합니다.
빌드 명령¶
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
필수 파일¶
| 유형 | 경로 | 설명 |
|---|---|---|
| C 확장 | game/_ccore.cp3XX-*.pyd |
A* 경로 탐색, 공간 해싱 등의 핵심 가속 모듈 |
| 게임 콘텐츠 | game/content/*.json |
클래스, 적, 건물 정의 |
| 언어 팩 | game/lang/*.json |
15개 언어 번역 |
| 아트 에셋 | assets/ |
모든 이미지, 음악, 효과음 |
| 캠페인 | campaigns/ |
내장 튜토리얼 캠페인 |
| 커스텀 맵 | maps/ |
사용자 맵 |
| 플러그인 | plugins/ |
서드파티 확장 |
| Steam SDK | steam_sdk/ |
Steamworks DLL |
| 라이선스 | THIRD_PARTY_LICENSES.md 등 |
LGPLv3 준수 문서 |
Python 버전
.pyd 파일명에는 Python 버전이 포함되어 있습니다(예: cp314). Python 버전을 변경한 후에는 C 확장을 다시 컴파일하고 빌드 명령의 파일명을 업데이트해야 합니다.