05/23 Phase 8

This commit is contained in:
2026-05-23 12:05:33 -04:00
parent 8fc1878670
commit 524cdfda9a
10 changed files with 149 additions and 18 deletions
+87
View File
@@ -0,0 +1,87 @@
# lottosight.spec
# ----------------
# PyInstaller spec for LottoSight (Windows directory build).
# Build: pyinstaller lottosight.spec
# Output: dist/LottoSight/LottoSight.exe (+ supporting files)
#
# User-writable data (DB, exports) is stored next to the .exe at runtime.
# Read-only assets (icon) are bundled inside the package via datas.
from PyInstaller.utils.hooks import collect_data_files, collect_submodules
# ── Data files ────────────────────────────────────────────────────────────────
datas = [
# Bundle the assets folder (icon.png) into the package root
('assets', 'assets'),
]
# Matplotlib ships its own data directory (fonts, colormaps, style sheets)
datas += collect_data_files('matplotlib')
# openpyxl ships its own templates
datas += collect_data_files('openpyxl')
# ── Hidden imports ────────────────────────────────────────────────────────────
hiddenimports = [
# Matplotlib TkAgg backend — not detected by static analysis
'matplotlib.backends.backend_tkagg',
# APScheduler components loaded via entry-point discovery at runtime
'apscheduler.schedulers.background',
'apscheduler.executors.pool',
'apscheduler.jobstores.memory',
'apscheduler.triggers.interval',
'apscheduler.triggers.date',
# bs4 HTML parser back-end
'bs4.builder._htmlparser',
# Tkinter sub-modules
'tkinter',
'tkinter.ttk',
'tkinter.filedialog',
'tkinter.messagebox',
]
# ── Analysis ──────────────────────────────────────────────────────────────────
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=datas,
hiddenimports=hiddenimports,
hookspath=[],
hooksconfig={},
runtime_hooks=[],
# Strip test / notebook dependencies to keep the bundle smaller
excludes=['pytest', 'IPython', 'ipykernel', 'jupyter'],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
# ── Executable ────────────────────────────────────────────────────────────────
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True, # binaries go into COLLECT, not baked into exe
name='LottoSight',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False, # no console window (pure GUI app)
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
# ── Directory bundle ──────────────────────────────────────────────────────────
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='LottoSight', # output: dist/LottoSight/
)