Ana içeriğe geç

Paketleme ve Dağıtım

Wayward Crown, oyunu doğrudan dağıtılabilir çalıştırılabilir dosyalara derlemek için iki paketleme yöntemi sunar.


Yöntem Karşılaştırması

Öğe PyInstaller Nuitka
Derleme hızı Hızlı (saniyeler ila dakikalar) Yavaş (5-15 dakika)
Çalışma hızı Python ile aynı Biraz daha hızlı (+%5-%30)
Kaynak kodu koruması .pyc decompile edilebilir C'ye derlenir, tersine mühendislik çok zor
Dağıtım boyutu Daha küçük Daha büyük
C derleyicisi gerekli Hayır Evet
Önerilen kullanım Geliştirme ve test Üretim sürümleri

Ön Koşullar

pip install -r requirements.txt
python setup_ext.py build_ext --inplace   # game/_ccore.*.pyd dosyasını üretir

C uzantısı önce derlenmelidir; aksi takdirde oyun saf Python yoluna geri döner (daha düşük performans).


PyInstaller

Kurulum

pip install pyinstaller

Derleme Komutu

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

Çıktı

dist/WaywardCrown/
├── WaywardCrown.exe
└── _internal/
    ├── assets/
    ├── game/
    │   ├── _ccore.cp314-win_amd64.pyd
    │   ├── content/
    │   └── lang/
    ├── campaigns/
    ├── maps/
    └── plugins/

Nuitka

Kurulum

pip install nuitka zstandard ordered-set

Bir C derleyicisi gerektirir (Visual Studio Build Tools veya MinGW64).

Derleme Komutu

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

Gerekli Dosyalar

Tür Yol Açıklama
C uzantısı game/_ccore.cp3XX-*.pyd A* yol bulma, mekansal hashing vb. için çekirdek hızlandırma
Oyun içeriği game/content/*.json Sınıf, düşman ve bina tanımları
Dil paketleri game/lang/*.json 15 dil çevirisi
Görsel varlıklar assets/ Tüm görseller, müzikler ve ses efektleri
Kampanyalar campaigns/ Yerleşik eğitim kampanyası
Özel haritalar maps/ Kullanıcı haritaları
Eklentiler plugins/ Üçüncü taraf uzantılar
Steam SDK steam_sdk/ Steamworks DLL
Lisanslar THIRD_PARTY_LICENSES.md vb. LGPLv3 uyumluluk belgeleri

Python Sürümü

.pyd dosya adı Python sürümünü içerir (örn. cp314). Python sürümünü değiştirdikten sonra C uzantısını yeniden derlemeniz ve derleme komutundaki dosya adını güncellemeniz gerekir.