feat: сборка в exe (PyInstaller)

- dokogen.spec: упаковка dictionaries/, data/, словарей pymorphy3,
  скрытые импорты lxml/openpyxl; один файл dist/DokoGen.exe
- build_exe.bat: установка PyInstaller + зависимостей + сборка
This commit is contained in:
2026-08-03 20:35:17 +04:00
parent 5c75a72b51
commit 2c3d25e790
2 changed files with 104 additions and 0 deletions
+61
View File
@@ -0,0 +1,61 @@
# -*- mode: python ; coding: utf-8 -*-
"""DokoGen spec для PyInstaller.
Сборка: py -m PyInstaller --clean --noconfirm dokogen.spec
Результат: dist/DokoGen.exe (один файл, запускается на любом Windows без Python).
"""
import sys
from PyInstaller.utils.hooks import collect_data_files, collect_submodules
# ---------- Данные приложения ----------
datas = [
# Справочники (defense_tools.json, pd_actions.json, pd_items.json, pd_categories.json)
('dokogen/dictionaries', 'dokogen/dictionaries'),
# Пустой опросник 152-ФЗ (для «Справка → Пустой опросник»)
('dokogen/data', 'dokogen/data'),
]
# ---------- Словари pymorphy3 (обязательно!) ----------
# Без них склонение организаций/ФИО в exe не будет работать.
datas += collect_data_files('pymorphy3_dicts_ru')
datas += collect_data_files('pymorphy3')
# ---------- Скрытые импорты ----------
hiddenimports = collect_submodules('pymorphy3') + collect_submodules('pymorphy3_dicts_ru')
hiddenimports += [
'lxml', 'lxml.etree', 'lxml._elementpath',
'openpyxl', 'openpyxl.cell._writer',
]
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=datas,
hiddenimports=hiddenimports,
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='DokoGen',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False, # GUI-приложение, без консоли
disable_windowed_traceback=False,
icon=None,
)