# -*- mode: python ; coding: utf-8 -*- # PyInstaller spec file for Windows executable (Web-based UI) block_cipher = None import os import sys # Hardcode the venv esptool path since PyInstaller might run from different env esptool_dir = os.path.join(os.path.dirname(SPECPATH), 'venv', 'Lib', 'site-packages', 'esptool') # Build datas list - include all esptool data files datas_list = [ ('templates', 'templates'), ('static', 'static'), ] # Add esptool targets directory (includes stub_flasher JSON files) if os.path.exists(os.path.join(esptool_dir, 'targets')): datas_list.append((os.path.join(esptool_dir, 'targets'), 'esptool/targets')) a = Analysis( ['web_flasher.py'], pathex=[], binaries=[], datas=datas_list, hiddenimports=[ 'serial.tools.list_ports', 'flask', 'jinja2', 'werkzeug', 'flask_socketio', 'socketio', 'engineio.async_drivers.threading', 'esptool', 'esptool.cmds', 'esptool.loader', 'esptool.util', ], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='ESP32_Flasher', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=False, # No console window disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, icon=None, # Add path to .ico file if you have one )