PyInstaller打包的exe被误报病毒,如何解决并交付给客户?
PyInstaller打包exe被杀毒软件误报的解决方法
问题描述
我使用命令 python -m PyInstaller --onefile .\main.py 将main.py打包为单文件exe,文件保存于dist目录,上传至GitHub项目仓库的release后,下载时Chrome将其标记为病毒,双击运行时Windows Defender也识别为病毒并删除,需要解决此问题以向客户交付exe格式的项目。
解决方法
- 给exe添加数字签名:这是最彻底的解决方案。购买正规机构(如DigiCert、GlobalSign)的代码签名证书,使用signtool工具对打包后的exe进行签名。签名后的文件会被杀毒软件认定为可信程序,大幅降低误报概率,同时提升客户信任度。
- 调整PyInstaller打包策略:
- 放弃
--onefile参数,使用多文件模式打包。单文件exe运行时会在系统临时目录解压依赖,这种行为容易被判定为可疑;多文件模式直接将依赖文件和主exe放在同一目录,更符合常规软件结构。 - 用
--name参数指定更规范的程序名称,避免使用main.exe这类通用命名;用--icon参数添加自定义图标,让程序外观更贴近正规软件,减少误报触发点。
- 放弃
- 向杀毒厂商提交误报申诉:
- 针对Windows Defender:通过微软官方的恶意软件误报提交渠道,上传你的exe文件并说明这是合法的Python打包程序,请求解除误报。
- 针对Chrome:通过谷歌的安全误报申诉渠道提交文件,说明这是开源项目的合法发布产物。
- 更换打包工具:如果PyInstaller的误报问题难以解决,可尝试Nuitka(将Python代码编译为C语言再生成exe,结构更接近原生程序,误报率更低)、cx_Freeze等替代工具。
- 指导客户添加信任(小范围交付适用):如果是面向少量客户交付,可指导客户将exe添加到Windows Defender的排除列表,在Chrome下载时选择“保留危险文件”。但此方法仅适合小范围场景,不适合公开分发。
- 强化代码透明度:你的项目已托管在GitHub,可明确告知客户代码开源可查,让客户了解程序的安全性,同时也有助于杀毒厂商判定文件的合法性。
内容的提问来源于stack exchange,提问作者Arnav Nagpurkar
相关产品推荐
相关产品推荐

