Spaces:
Running
Running
| # -*- mode: python ; coding: utf-8 -*- | |
| """ | |
| PyInstaller spec file for AI 学术写作助手 | |
| 用于将前后端项目打包为单个可执行文件 | |
| """ | |
| import os | |
| import sys | |
| from PyInstaller.utils.hooks import collect_submodules, collect_data_files | |
| # 获取 spec 文件所在目录 | |
| spec_dir = os.path.dirname(os.path.abspath(SPEC)) | |
| # 收集所需的隐式导入 | |
| hidden_imports = [ | |
| 'uvicorn.logging', | |
| 'uvicorn.loops', | |
| 'uvicorn.loops.auto', | |
| 'uvicorn.protocols', | |
| 'uvicorn.protocols.http', | |
| 'uvicorn.protocols.http.auto', | |
| 'uvicorn.protocols.websockets', | |
| 'uvicorn.protocols.websockets.auto', | |
| 'uvicorn.lifespan', | |
| 'uvicorn.lifespan.on', | |
| 'uvicorn.lifespan.off', | |
| 'httptools', | |
| 'websockets', | |
| 'sqlalchemy.dialects.sqlite', | |
| 'pydantic', | |
| 'pydantic_settings', | |
| 'passlib.handlers.bcrypt', | |
| 'jose', | |
| 'openai', | |
| 'httpx', | |
| 'aiofiles', | |
| 'sse_starlette', | |
| 'redis', | |
| 'dotenv', | |
| # Word 格式化模块依赖 | |
| 'mistune', | |
| 'docx', | |
| 'lxml', | |
| 'lxml.etree', | |
| 'lxml._elementpath', | |
| ] | |
| # 收集 uvicorn 和其他依赖的子模块 | |
| hidden_imports += collect_submodules('uvicorn') | |
| hidden_imports += collect_submodules('sqlalchemy') | |
| hidden_imports += collect_submodules('pydantic') | |
| hidden_imports += collect_submodules('pydantic_settings') | |
| hidden_imports += collect_submodules('fastapi') | |
| hidden_imports += collect_submodules('starlette') | |
| # Word 格式化模块子模块 | |
| hidden_imports += collect_submodules('mistune') | |
| hidden_imports += collect_submodules('docx') | |
| hidden_imports += collect_submodules('lxml') | |
| # 分析主入口文件 | |
| a = Analysis( | |
| ['main.py'], | |
| pathex=[spec_dir, os.path.join(spec_dir, 'backend')], | |
| binaries=[], | |
| datas=[ | |
| # 包含前端静态文件 | |
| ('static', 'static'), | |
| # 包含后端 app 目录 | |
| ('backend/app', 'app'), | |
| ], | |
| hiddenimports=hidden_imports, | |
| hookspath=[], | |
| hooksconfig={}, | |
| runtime_hooks=[], | |
| excludes=[ | |
| 'tkinter', | |
| 'matplotlib', | |
| 'numpy', | |
| 'pandas', | |
| 'scipy', | |
| 'PIL', | |
| ], | |
| win_no_prefer_redirects=False, | |
| win_private_assemblies=False, | |
| cipher=None, | |
| noarchive=False, | |
| ) | |
| # 创建 PYZ 归档 | |
| pyz = PYZ(a.pure, a.zipped_data, cipher=None) | |
| # 创建可执行文件 | |
| exe = EXE( | |
| pyz, | |
| a.scripts, | |
| a.binaries, | |
| a.zipfiles, | |
| a.datas, | |
| [], | |
| name='AI学术写作助手', | |
| debug=False, | |
| bootloader_ignore_signals=False, | |
| strip=False, | |
| upx=True, | |
| upx_exclude=[], | |
| runtime_tmpdir=None, | |
| console=True, # 设置为 True 以显示控制台窗口(可以看到日志) | |
| disable_windowed_traceback=False, | |
| argv_emulation=False, | |
| target_arch=None, | |
| codesign_identity=None, | |
| entitlements_file=None, | |
| icon=None, # 可以添加图标文件路径 | |
| ) | |