155 lines
3.6 KiB
Python
155 lines
3.6 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',
|
|
'sentence_transformers',
|
|
'transformers',
|
|
'torch',
|
|
'numpy',
|
|
'sklearn',
|
|
'scipy',
|
|
'tokenizers',
|
|
'huggingface_hub',
|
|
]
|
|
|
|
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',
|
|
# Sentence transformers specific imports
|
|
'sentence_transformers.models.Transformer',
|
|
'sentence_transformers.models.Pooling',
|
|
'sentence_transformers.models.Normalize',
|
|
'sentence_transformers.cross_encoder',
|
|
'sentence_transformers.util',
|
|
'sentence_transformers.evaluation',
|
|
'transformers.models.auto.modeling_auto',
|
|
'transformers.models.auto.tokenization_auto',
|
|
'transformers.models.auto.configuration_auto',
|
|
'transformers.models.bert',
|
|
'transformers.models.distilbert',
|
|
'transformers.models.roberta',
|
|
'transformers.models.mpnet',
|
|
'torch._C',
|
|
'torch.nn.functional',
|
|
'torch.utils.data',
|
|
'sklearn.metrics.pairwise',
|
|
'sklearn.feature_extraction.text',
|
|
'numpy.core._methods',
|
|
'numpy.lib.format',
|
|
]
|
|
|
|
# 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,
|
|
)
|