glowpath/backend/glowpath-backend.spec
I. A. Naval 3218c10063
Add bundled open-webui
Use pyinstaller to compile to a single bundle
2025-06-28 15:09:35 -04:00

126 lines
2.7 KiB
Python

# -*- mode: python ; coding: utf-8 -*-
from PyInstaller.utils.hooks import collect_all, collect_data_files, collect_submodules
import os
import sys
# Collect all open-webui files and dependencies
datas = []
binaries = []
hiddenimports = []
# Collect open-webui and its dependencies
tmp_ret = collect_all('open_webui')
datas += tmp_ret[0]
binaries += tmp_ret[1]
hiddenimports += tmp_ret[2]
# Collect additional packages that might have data files or hidden imports
additional_packages = [
'bcrypt',
'cryptography',
'passlib',
'fastapi',
'uvicorn',
'pydantic',
'sqlalchemy',
'alembic',
'jinja2',
'aiofiles',
'python_multipart',
'httpx',
'requests',
'websockets',
'sse_starlette',
'chromadb',
]
for package in additional_packages:
try:
tmp_ret = collect_all(package)
datas += tmp_ret[0]
binaries += tmp_ret[1]
hiddenimports += tmp_ret[2]
except ImportError:
print(f"Warning: Package {package} not found, skipping...")
# Additional hidden imports that might be needed
hiddenimports += [
'uvicorn.main',
'uvicorn.protocols.http.auto',
'uvicorn.protocols.websockets.auto',
'uvicorn.lifespan.on',
'uvicorn.loops.auto',
'uvicorn.logging',
'fastapi.middleware.cors',
'fastapi.responses',
'passlib.handlers.bcrypt',
'passlib.handlers.pbkdf2',
'cryptography.hazmat.backends.openssl',
'sqlalchemy.dialects.sqlite',
'sqlalchemy.pool',
'alembic.runtime.migration',
'email_validator',
'chromadb.utils.embedding_functions.onnx_mini_lm_l6_v2',
'chromadb.utils.embedding_functions',
'chromadb.config',
'chromadb.db',
'chromadb.db.impl',
'onnxruntime',
]
# Include SSL certificates
import ssl
ssl_paths = ssl.get_default_verify_paths()
if ssl_paths.cafile:
datas.append((ssl_paths.cafile, 'certifi'))
a = Analysis(
['main.py'],
pathex=[],
binaries=binaries,
datas=datas,
hiddenimports=hiddenimports,
hookspath=['hooks'],
hooksconfig={},
runtime_hooks=[],
excludes=[
'tkinter',
'matplotlib',
'IPython',
'jupyter',
'notebook',
'test',
'tests',
],
noarchive=False,
optimize=0,
)
# Remove duplicate entries
a.datas = list(set(a.datas))
a.binaries = list(set(a.binaries))
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='glowpath-backend',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=None,
)