114 lines
2.6 KiB
RPMSpec
114 lines
2.6 KiB
RPMSpec
|
|
# -*- mode: python ; coding: utf-8 -*-
|
||
|
|
|
||
|
|
import sys
|
||
|
|
import os
|
||
|
|
from PyInstaller.utils.hooks import collect_submodules, collect_data_files
|
||
|
|
|
||
|
|
# ========================================================
|
||
|
|
# 1. 工程配置区 (Project Config)
|
||
|
|
# ========================================================
|
||
|
|
block_cipher = None
|
||
|
|
ENTRY_POINT = 'start_parse.py'
|
||
|
|
APP_NAME = 'start_parse' # 打包后生成的文件夹名和 exe 名
|
||
|
|
|
||
|
|
# ========================================================
|
||
|
|
# 2. 依赖分析 (Dependency Analysis)
|
||
|
|
# ========================================================
|
||
|
|
hidden_imports = [
|
||
|
|
# eegParser 依赖
|
||
|
|
'numpy',
|
||
|
|
'numpy.lib.stride_tricks',
|
||
|
|
'pandas',
|
||
|
|
'scipy',
|
||
|
|
'scipy.io',
|
||
|
|
'scipy.io.savemat',
|
||
|
|
'scipy.signal',
|
||
|
|
|
||
|
|
# SunnyLinker 依赖
|
||
|
|
'serial',
|
||
|
|
'serial.serialutil',
|
||
|
|
'socket',
|
||
|
|
|
||
|
|
# zmq 通信依赖
|
||
|
|
'zmq',
|
||
|
|
'zmq.asyncio',
|
||
|
|
|
||
|
|
# 其他可能遗漏的模块
|
||
|
|
'threading',
|
||
|
|
'datetime',
|
||
|
|
]
|
||
|
|
|
||
|
|
# 收集 zmq 的所有子模块
|
||
|
|
try:
|
||
|
|
hidden_imports += collect_submodules('zmq')
|
||
|
|
except:
|
||
|
|
pass
|
||
|
|
|
||
|
|
# ========================================================
|
||
|
|
# 3. 资源锚定 (Data Anchoring)
|
||
|
|
# ========================================================
|
||
|
|
# 打包时需要包含的资源文件
|
||
|
|
datas = [
|
||
|
|
('xy_64.xlsx', '.'), # 电极位置文件
|
||
|
|
]
|
||
|
|
|
||
|
|
# 收集 mne 的数据文件(如果有)
|
||
|
|
try:
|
||
|
|
datas += collect_data_files('mne')
|
||
|
|
except:
|
||
|
|
pass
|
||
|
|
|
||
|
|
# ========================================================
|
||
|
|
# 4. 构建流程 (Build Process)
|
||
|
|
# ========================================================
|
||
|
|
a = Analysis(
|
||
|
|
[ENTRY_POINT],
|
||
|
|
pathex=[],
|
||
|
|
binaries=[],
|
||
|
|
datas=datas,
|
||
|
|
hiddenimports=hidden_imports,
|
||
|
|
hookspath=[],
|
||
|
|
hooksconfig={},
|
||
|
|
runtime_hooks=[],
|
||
|
|
excludes=['tkinter', 'PyQt5', 'PySide2', 'IPython', 'matplotlib'],
|
||
|
|
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,
|
||
|
|
[],
|
||
|
|
exclude_binaries=True,
|
||
|
|
name=APP_NAME,
|
||
|
|
debug=False,
|
||
|
|
bootloader_ignore_signals=False,
|
||
|
|
strip=False,
|
||
|
|
upx=True,
|
||
|
|
upx_exclude=[],
|
||
|
|
console=True,
|
||
|
|
disable_windowed_traceback=False,
|
||
|
|
argv_emulation=False,
|
||
|
|
target_arch=None,
|
||
|
|
codesign_identity=None,
|
||
|
|
entitlements_file=None,
|
||
|
|
)
|
||
|
|
|
||
|
|
# ========================================================
|
||
|
|
# 5. 打包模式: OneDir (单文件夹)
|
||
|
|
# ========================================================
|
||
|
|
coll = COLLECT(
|
||
|
|
exe,
|
||
|
|
a.binaries,
|
||
|
|
a.zipfiles,
|
||
|
|
a.datas,
|
||
|
|
strip=False,
|
||
|
|
upx=True,
|
||
|
|
upx_exclude=[],
|
||
|
|
name=APP_NAME,
|
||
|
|
)
|