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:
@@ -10,19 +10,21 @@ block_cipher = None
|
|||||||
# Determine if we're on Windows
|
# Determine if we're on Windows
|
||||||
is_windows = sys.platform == 'win32'
|
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
|
# Find faster_whisper assets folder
|
||||||
import faster_whisper
|
import faster_whisper
|
||||||
faster_whisper_path = os.path.dirname(faster_whisper.__file__)
|
faster_whisper_path = os.path.dirname(faster_whisper.__file__)
|
||||||
vad_assets_path = os.path.join(faster_whisper_path, 'assets')
|
vad_assets_path = os.path.join(faster_whisper_path, 'assets')
|
||||||
|
|
||||||
a = Analysis(
|
# Base configuration
|
||||||
['main.py'],
|
binaries = []
|
||||||
pathex=[],
|
|
||||||
binaries=[],
|
|
||||||
datas = [
|
datas = [
|
||||||
('config/default_config.yaml', 'config'),
|
('config/default_config.yaml', 'config'),
|
||||||
(vad_assets_path, 'faster_whisper/assets'), # Include VAD model
|
(vad_assets_path, 'faster_whisper/assets'), # Include VAD model
|
||||||
],
|
]
|
||||||
hiddenimports = [
|
hiddenimports = [
|
||||||
'PySide6.QtCore',
|
'PySide6.QtCore',
|
||||||
'PySide6.QtWidgets',
|
'PySide6.QtWidgets',
|
||||||
@@ -78,7 +80,28 @@ a = Analysis(
|
|||||||
'urllib3',
|
'urllib3',
|
||||||
'certifi',
|
'certifi',
|
||||||
'charset_normalizer',
|
'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=[],
|
hookspath=[],
|
||||||
hooksconfig={},
|
hooksconfig={},
|
||||||
runtime_hooks=[],
|
runtime_hooks=[],
|
||||||
|
|||||||
Reference in New Issue
Block a user