diff --git a/dokogen.spec b/dokogen.spec new file mode 100644 index 0000000..85ac2f5 --- /dev/null +++ b/dokogen.spec @@ -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='dokogen/icon.ico', +) diff --git a/dokogen/icon.ico b/dokogen/icon.ico new file mode 100644 index 0000000..87c9b59 Binary files /dev/null and b/dokogen/icon.ico differ