# -*- mode: python ; coding: utf-8 -*- from pathlib import Path from PyInstaller.utils.hooks import collect_all # 强制收集 PyQt5 全部模块及二进制文件 qt_datas, qt_binaries, qt_hiddenimports = collect_all('PyQt5') # 自动收集 lite 目录下全部 *.json 数据文件(nodes.json / pac_*.json 等), # 直接打进 EXE 内置目录(_MEIPASS),运行时无需在 EXE 旁附带任何文件。 # 以后新增 json 数据文件无需再改 spec。 _JSON_DATAS = [(str(p), '.') for p in Path(SPECPATH).glob('*.json')] print(f"[spec] 打包 json 数据文件: {[Path(src).name for src, _ in _JSON_DATAS]}") # 自定义 manifest:普通权限运行 + 声明 PerMonitorV2 DPI 感知, # 避免程序在不同缩放比例的显示器之间移动时被 Windows 位图拉伸。 _MANIFEST = r''' Royirin Rosmontis Private Proxy Lite PerMonitorV2, PerMonitor, system true/pm ''' a = Analysis( ['proxy_lite.py'], pathex=['..\\.venv\\Lib\\site-packages'], binaries=qt_binaries, datas=[('ico.ico', '.')] + _JSON_DATAS + qt_datas, hiddenimports=qt_hiddenimports, hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], noarchive=False, optimize=0, ) pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, a.binaries, a.datas, [], name='Royirin Rosmontis Private Proxy Lite', debug=False, bootloader_ignore_signals=False, strip=False, # UPX 会压缩资源段(含图标),冷缓存下 Explorer 可能提取不到图标导致任务栏空白 upx=False, upx_exclude=[], runtime_tmpdir=None, console=False, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, icon=['ico.ico'], manifest=_MANIFEST, )