# -*- 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'), # Пустой опросник KZI (для «Справка → Пустой опросник») ('dokogen/data', 'dokogen/data'), # Иконка приложения (для окна программы в exe) ('dokogen/icon.ico', 'dokogen'), ] # ---------- Словари 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='dokogen/icon.ico', )