75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
# -*- mode: python ; coding: utf-8 -*-
|
||
import os
|
||
|
||
block_cipher = None
|
||
|
||
# 获取当前工作目录(项目根目录)
|
||
PROJECT_ROOT = os.path.abspath('.')
|
||
|
||
# 动态组装需要打包的静态数据文件
|
||
datas = [
|
||
('web_ui/templates', 'web_ui/templates')
|
||
]
|
||
|
||
if os.path.exists(os.path.join(PROJECT_ROOT, 'web_ui', 'static')):
|
||
datas.append(('web_ui/static', 'web_ui/static'))
|
||
|
||
if os.path.exists(os.path.join(PROJECT_ROOT, 'browser_login', '.env')):
|
||
datas.append(('browser_login/.env', 'browser_login'))
|
||
|
||
a = Analysis(
|
||
['web_ui/app.py'], # 主入口点
|
||
pathex=[
|
||
PROJECT_ROOT,
|
||
os.path.join(PROJECT_ROOT, 'browser_login') # 确保能找到抓取脚本的路径
|
||
],
|
||
binaries=[],
|
||
datas=datas,
|
||
hiddenimports=[
|
||
'flask',
|
||
'apscheduler.schedulers.background',
|
||
'apscheduler.triggers.interval', # 必须显式声明,否则打包后定时任务可能找不到触发器
|
||
'DrissionPage',
|
||
'dotenv',
|
||
'sqlite3',
|
||
# 我们通过字符串动态导入的模块,必须声明让 PyInstaller 去追踪
|
||
'fetch_receipt_details_incremental',
|
||
'fetch_bom_cost_full_tree',
|
||
'config',
|
||
'login',
|
||
'auto_launcher',
|
||
'bom_query'
|
||
],
|
||
hookspath=[],
|
||
hooksconfig={},
|
||
runtime_hooks=[],
|
||
excludes=[],
|
||
win_no_prefer_redirects=False,
|
||
win_private_assemblies=False,
|
||
cipher=block_cipher,
|
||
noarchive=False,
|
||
)
|
||
|
||
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
|
||
|
||
exe = EXE(
|
||
pyz,
|
||
a.scripts,
|
||
a.binaries,
|
||
a.zipfiles,
|
||
a.datas,
|
||
[],
|
||
name='DatieERP', # 生成的 .exe 文件名称
|
||
debug=False, # 生产环境关闭 Debug 模式
|
||
bootloader_ignore_signals=False,
|
||
strip=False,
|
||
upx=True, # 启用 UPX 压缩以减小包体积(如果环境中有的话)
|
||
upx_exclude=[],
|
||
runtime_tmpdir=None, # 使用默认临时目录 (即 sys._MEIPASS)
|
||
console=True, # 是否保留黑色命令行窗口(开发初期建议保留看日志,稳定后可改为 False)
|
||
disable_windowed_traceback=False,
|
||
argv_emulation=False,
|
||
target_arch=None,
|
||
codesign_identity=None,
|
||
entitlements_file=None,
|
||
) |