跳轉到

打包發布

不馴之冠提供兩種打包方式,將遊戲編譯為可直接分發的執行檔。


方案比較

項目 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 擴展並更新打包指令中的檔名。