# -*- mode: python ; coding: utf-8 -*- import os import sys from PyInstaller.utils.hooks import collect_data_files block_cipher = None # 获取spec文件所在目录(项目根目录) spec_dir = os.path.dirname(os.path.abspath(sys.argv[0])) # 定义需要打包的资源文件 resource_files = [ # 将resource文件夹下的所有文件打包到程序内的resource目录 (os.path.join(spec_dir, 'resource'), 'resource') ] # 收集PyQt相关的数据文件 qt_data = collect_data_files('PyQt5') # 合并所有资源文件 all_resources = resource_files + qt_data # 定义所有需要打包的文件和依赖 a = Analysis( ['./src/main.py'], # 程序入口文件 pathex=['./'], # 工程根目录(确保能找到子模块) binaries=[], # 配置资源文件(子模块会自动识别,主要配置非.py文件) datas=all_resources, # 隐藏依赖(若打包后提示缺少模块,添加在这里) hiddenimports=[ ], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], # 排除不需要的模块(减小体积) noarchive=False, cipher=block_cipher, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, name='OneKeyDiag', # 生成的EXE文件名 debug=False, bootloader_ignore_signals=False, strip=False, upx=True, # 启用压缩(推荐) upx_exclude=[], runtime_tmpdir=None, console=False, # 隐藏控制台(GUI程序) disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, # 指定程序图标(使用resources文件夹中的ico文件) icon=os.path.join(spec_dir, 'resource','favicon.ico'), )