Fix Windows build: Use collect_all for FastAPI packages

- On Windows, PyInstaller wasn't properly bundling FastAPI dependencies
- Added platform-specific collection using PyInstaller.utils.hooks.collect_all
- Only applies aggressive collection on Windows to keep Linux builds stable
- Collects all submodules and data files for: fastapi, starlette, pydantic,
  pydantic_core, anyio, uvicorn, websockets, h11
- Linux builds remain unchanged and continue to work as before

Fixes: ModuleNotFoundError: No module named 'fastapi' on Windows executable
This commit is contained in:
2025-12-26 11:01:43 -08:00
parent 0ee3f1003e
commit 926910177d

View File

@@ -10,19 +10,21 @@ block_cipher = None
# Determine if we're on Windows
is_windows = sys.platform == 'win32'
# Import PyInstaller utilities (only needed on Windows for FastAPI fix)
if is_windows:
from PyInstaller.utils.hooks import collect_all
# Find faster_whisper assets folder
import faster_whisper
faster_whisper_path = os.path.dirname(faster_whisper.__file__)
vad_assets_path = os.path.join(faster_whisper_path, 'assets')
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
# Base configuration
binaries = []
datas = [
('config/default_config.yaml', 'config'),
(vad_assets_path, 'faster_whisper/assets'), # Include VAD model
],
]
hiddenimports = [
'PySide6.QtCore',
'PySide6.QtWidgets',
@@ -78,7 +80,28 @@ a = Analysis(
'urllib3',
'certifi',
'charset_normalizer',
],
]
# On Windows, use more aggressive collection for FastAPI packages
# This fixes import errors on Windows while keeping Linux builds stable
if is_windows:
print("Windows build: Using collect_all for FastAPI packages...")
for package in ['fastapi', 'starlette', 'pydantic', 'pydantic_core', 'anyio', 'uvicorn', 'websockets', 'h11']:
try:
tmp_datas, tmp_binaries, tmp_hiddenimports = collect_all(package)
datas += tmp_datas
binaries += tmp_binaries
hiddenimports += tmp_hiddenimports
print(f" Collected {package}")
except Exception as e:
print(f" Warning: Could not collect {package}: {e}")
a = Analysis(
['main.py'],
pathex=[],
binaries=binaries,
datas=datas,
hiddenimports=hiddenimports,
hookspath=[],
hooksconfig={},
runtime_hooks=[],