PyInstaller打包的exe启动慢的核心原因是Python解释器初始化和冻结环境加载耗时,尤其导入大量模块时需从.exe解压构建sys.path;Windows上还受杀软扫描、UAC、I/O等影响。
核心原因是 Python 解释器初始化 + 冻结环境加载耗时,尤其在导入大量标准库或第三方模块(如 matplotlib、pandas、requests)时,PyInstaller 需从单个 .exe 中解压并构建临时 sys.path,这个过程无法跳过。Windows 上还叠加了杀毒软件扫描、UAC 提权延迟、磁盘 I/O 慢等外部因素。
--onefile 模式比 --onedir 启动更慢(每次都要解压资源) --onedir 生成一个文件夹,把所有依赖解压到磁盘固定位置,下次启动直接读取,跳过重复解压。实测多数 GUI 程序启动时间可从 5–10 秒降至 1–2 秒。
--noconsole(GUI 程序)或保留控制台(CLI 程序),否则窗口闪退风险上升 build/ 和 pycache/ 目录节省体积,不影响启动速度 --onefile,加 --upx-exclude=vcruntime140.dll 避免 UPX 压缩干扰加载(某些 DLL 被压缩后加载异常变慢) 很多程序在模块顶层就 import torch、sklearn 等重型库,哪怕实际只在某个按钮点击后才用。这些 import 会

def on_click(): import pandas as pd # ← 放这里,不用时完全不加载 df = pd.read_csv(...)
importlib.import_module() 动态加载,便于按需控制时机 init.py 是否隐式触发了冗余 import 链 from xxx import *,显式列出所需符号,减少未使用模块的加载 部分企业环境或新 Win10/11 机器会对首次运行的未签名 exe 进行全量扫描,导致卡在“正在检查此应用”界面数秒甚至十几秒。
signtool 对 exe 签名(需购买代码签名证书),可彻底消除 SmartScreen 警告和杀软深度扫描 --add-binary 注入空资源节(如图标),有时能降低杀软可疑度 hack、crack、keygen 等敏感词,会被某些引擎主动拦截 启动慢问题往往不是单一原因,而是解释器冷启、磁盘解压、模块加载、系统策略四层叠加。最容易见效的是切 --onedir + 移除顶层重模块 import;最难但最彻底的,是签名 + 优化用户首次运行路径。