PCM_Viewer/build_optimized.py

99 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""
优化版打包脚本 - 加速启动时间
优化措施:
1. 延迟导入大型模块QWebEngineView, InfluxDBClient
2. 排除不需要的模块
3. 不使用 UPX 压缩
4. 优化 Python 字节码
"""
import os
import sys
import shutil
import subprocess
def main():
# 检查是否安装了 PyInstaller
try:
import PyInstaller
except ImportError:
print("错误:未安装 PyInstaller")
print("请运行: pip install pyinstaller")
sys.exit(1)
# 解析命令行参数
onedir = "--onedir" in sys.argv
# 清理之前的构建
if os.path.exists("build"):
shutil.rmtree("build")
if os.path.exists("dist"):
shutil.rmtree("dist")
if os.path.exists("PCM_Viewer.spec"):
os.remove("PCM_Viewer.spec")
# 构建优化的 PyInstaller 命令
cmd = [
"pyinstaller",
"--name=PCM_Viewer",
"--windowed", # 不显示控制台窗口
"--onefile" if not onedir else "--onedir",
# ========== 启动速度优化 ==========
"--noupx", # 不使用 UPX 压缩UPX 会增加启动时间)
"--optimize=2", # Python 字节码优化级别0-22 最高)
# 排除不需要的大型模块(减少打包体积和启动时间)
"--exclude-module=matplotlib",
"--exclude-module=numpy",
"--exclude-module=pandas",
"--exclude-module=scipy",
"--exclude-module=PIL",
"--exclude-module=tkinter",
"--exclude-module=PyQt5", # 排除 PyQt5如果不需要
# 隐藏导入(延迟导入的模块)
"--hidden-import=PyQt6.QtWebEngineWidgets",
"--hidden-import=influxdb_client",
"--hidden-import=influxdb_client.client",
"--hidden-import=influxdb_client.client.write_api",
"--hidden-import=influxdb_client.client.query_api",
"--hidden-import=influxdb_wrapper",
# 只收集必要的 PyQt6 模块(不收集全部,减少体积)
"--collect-all=PyQt6.QtWebEngineWidgets", # WebEngine 需要完整收集
# 不收集其他大型库
"--collect-submodules=influxdb_client", # 只收集 influxdb_client 的子模块
"main.py"
]
print("开始打包(优化版)...")
print(f"模式: {'单文件' if not onedir else '文件夹'}")
print(f"优化措施: 延迟导入、排除不需要的模块、不使用 UPX")
print(f"命令: {' '.join(cmd)}")
print()
# 执行打包
result = subprocess.run(cmd, check=False)
if result.returncode == 0:
print("\n打包成功!")
if not onedir:
print("单文件位置: dist/PCM_Viewer.exe")
print("\n优化说明:")
print("1. 延迟导入 QWebEngineView 和 InfluxDBClient减少启动时间")
print("2. 排除了不需要的大型模块matplotlib, numpy 等)")
print("3. 不使用 UPX 压缩,避免解压时间")
print("4. 首次运行会在 exe 同目录创建配置文件")
else:
print("文件夹位置: dist/PCM_Viewer/")
print("可执行文件: dist/PCM_Viewer/PCM_Viewer.exe")
else:
print("\n打包失败!")
sys.exit(1)
if __name__ == "__main__":
main()