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.