# -*- 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, )