You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

PyInstaller打包Python程序遭Windows Defender误报病毒的解决求助

解决PyInstaller打包exe被Windows Defender误报的可行方案

1. 给程序添加正规代码签名(最有效且合规

Windows Defender对未签名的陌生可执行文件会提高警惕,购买正规的代码签名证书(如DigiCert、GlobalSign等厂商的代码签名证书),对打包后的exe进行签名,能大幅降低误报概率。

  • 操作示例:使用微软的signtool工具签名,命令如下:
    signtool sign /f your_certificate.pfx /p your_cert_password "The Sleepless Drive.exe"
    
    可以在PyInstaller完成打包后执行签名,也可以配置PyInstaller在打包流程中自动完成签名。

2. 放弃单文件打包模式

--onefile参数会将所有依赖打包进单个exe,运行时需临时解压到系统临时目录,这种行为容易被杀毒软件判定为可疑。改用文件夹模式打包:

  • 修改打包命令,移除--onefile参数:
    pyinstaller -w --name "The Sleepless Drive" -i icon.ico main.py
    
    打包后会生成一个包含exe和所有依赖文件的文件夹,分发时压缩整个文件夹即可,这种模式的误报率显著低于单文件模式。

3. 向微软提交误报申诉

直接向微软反馈该程序属于误报,申请将其从病毒库中移除:

  • 访问微软恶意软件误报提交平台,上传被误报的exe文件,说明这是你开发的合法软件,附上软件的相关信息(如你的项目页面描述);
  • 微软审核通过后,Windows Defender就不会再对该程序触发误报。

4. 使用PyInstaller稳定版而非最新测试版

部分新版PyInstaller的打包逻辑变动可能导致误报,卸载当前版本后安装经过验证的稳定版:

  • 命令示例:
    pip uninstall pyinstaller -y && pip install pyinstaller==5.13.2
    

5. 优化代码与资源加载逻辑

检查代码中是否存在会触发杀毒规则的行为,比如读取敏感系统目录、动态加载未知文件等,调整代码逻辑:

  • 加载资源时,使用PyInstaller提供的sys._MEIPASS变量获取打包后的资源路径,确保资源加载路径明确,避免模糊的文件操作。例如:
    import sys
    import os
    
    def get_resource_path(relative_path):
        if hasattr(sys, '_MEIPASS'):
            return os.path.join(sys._MEIPASS, relative_path)
        return os.path.join(os.path.abspath("."), relative_path)
    
    用这个函数加载音效、图片等资源,避免路径模糊导致的可疑行为判定。

内容的提问来源于stack exchange,提问作者Praneel Srinivasan

火山引擎 最新活动