增加exe打包配置
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
# -*- mode: python ; coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
from pathlib import Path
|
||||
from PyInstaller.utils.hooks import collect_data_files, collect_submodules
|
||||
|
||||
# 获取项目根目录(spec 文件所在目录)
|
||||
import sys
|
||||
_REPO_DIR = Path(os.getcwd()).resolve()
|
||||
|
||||
# 根目录执行:pyinstaller --clean main.spec
|
||||
# 收集配置文件夹和数据文件
|
||||
datas = [
|
||||
# 所有数据文件都不打包,从外部读取
|
||||
# ('.env', '.'),
|
||||
# ('data/schemas', 'data/schemas'),
|
||||
# ('data/embeddings', 'data/embeddings'),
|
||||
# ('data/experiences', 'data/experiences'),
|
||||
]
|
||||
|
||||
# 收集所有需要的隐藏导入
|
||||
hiddenimports = [
|
||||
# Web 框架
|
||||
'fastapi',
|
||||
'fastapi.middleware.cors',
|
||||
'fastapi.responses',
|
||||
'uvicorn',
|
||||
'uvicorn.lifespan.on',
|
||||
'uvicorn.config',
|
||||
'uvicorn.protocols.http.auto',
|
||||
'uvicorn.protocols.websockets.auto',
|
||||
'uvicorn.loops.auto',
|
||||
|
||||
# Backend 模块(重要!)
|
||||
'main', # backend/main.py
|
||||
'backend.main',
|
||||
'backend.nl_lite_store',
|
||||
'backend.agents',
|
||||
'backend.agents.orchestrator',
|
||||
'backend.agents.schema_linker',
|
||||
'backend.agents.sql_generator',
|
||||
'backend.agents.validator',
|
||||
'backend.config',
|
||||
'backend.config.prompts',
|
||||
'backend.config.settings',
|
||||
'backend.db',
|
||||
'backend.db.engine',
|
||||
'backend.db.dbhub_tools',
|
||||
'backend.db.dbhub_sql_parser',
|
||||
'backend.db.dbhub_allowed_keywords',
|
||||
'backend.llm',
|
||||
'backend.llm.deepseek_client',
|
||||
'backend.schema',
|
||||
'backend.schema.manager',
|
||||
'backend.schema.loader',
|
||||
'backend.schema.indexer',
|
||||
'backend.schema.models',
|
||||
'backend.utils',
|
||||
'backend.utils.dialog_classifier',
|
||||
'backend.utils.embedding',
|
||||
'backend.utils.fewshot_selector',
|
||||
'backend.utils.question_locale',
|
||||
'backend.utils.sql_parser',
|
||||
'backend.utils.validators',
|
||||
|
||||
# 数据库相关
|
||||
'pymssql',
|
||||
'sqlalchemy',
|
||||
'sqlalchemy.dialects.mssql.pymssql',
|
||||
'sqlalchemy.dialects.mysql',
|
||||
'sqlalchemy.dialects.postgresql',
|
||||
'sqlglot',
|
||||
'sqlglot.dialects',
|
||||
'sqlparse',
|
||||
|
||||
# 向量数据库 - 使用 collect_submodules 自动收集所有子模块
|
||||
|
||||
# Embedding 相关
|
||||
'sentencepiece',
|
||||
'accelerate',
|
||||
'safetensors',
|
||||
|
||||
# LLM API
|
||||
'openai',
|
||||
|
||||
# 数据处理
|
||||
'numpy',
|
||||
'jieba',
|
||||
|
||||
# Pydantic
|
||||
'pydantic',
|
||||
'pydantic_settings',
|
||||
'dotenv',
|
||||
|
||||
# 工具库
|
||||
'tenacity',
|
||||
'structlog',
|
||||
'tqdm',
|
||||
'camel_ai',
|
||||
|
||||
# 标准库中可能被遗漏的
|
||||
'email.mime.text',
|
||||
'email.mime.multipart',
|
||||
] + collect_submodules('chromadb')
|
||||
# 排除不必要的模块以减小体积
|
||||
excludes = [
|
||||
'tkinter',
|
||||
'matplotlib',
|
||||
'scipy',
|
||||
'pandas.tests',
|
||||
'numpy.testing',
|
||||
'jupyter',
|
||||
'notebook',
|
||||
'IPython',
|
||||
'pytest',
|
||||
]
|
||||
|
||||
a = Analysis(
|
||||
['api_server.py'],
|
||||
pathex=[str(_REPO_DIR)],
|
||||
binaries=[],
|
||||
datas=datas,
|
||||
hiddenimports=hiddenimports,
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
runtime_hooks=[],
|
||||
excludes=excludes,
|
||||
noarchive=False,
|
||||
optimize=0,
|
||||
)
|
||||
pyz = PYZ(a.pure)
|
||||
|
||||
exe = EXE(
|
||||
pyz,
|
||||
a.scripts,
|
||||
a.binaries,
|
||||
a.datas, # 单文件模式:将数据文件打包进 exe
|
||||
[],
|
||||
name='Backman_Text2SQL_Server',
|
||||
debug=False,
|
||||
bootloader_ignore_signals=False,
|
||||
strip=False,
|
||||
upx=False, # 禁用 UPX,避免兼容性问题
|
||||
upx_exclude=[],
|
||||
runtime_tmpdir=None,
|
||||
console=True,
|
||||
disable_windowed_traceback=False,
|
||||
argv_emulation=False,
|
||||
target_arch=None,
|
||||
codesign_identity=None,
|
||||
entitlements_file=None,
|
||||
)
|
||||
Reference in New Issue
Block a user