You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller打包exe跨设备运行报Failed to execute script错误

问题核心原因

这是PyInstaller打包Selenium类项目的高频踩坑点。你自己电脑能正常运行,是因为本地已经装全了Python环境、浏览器驱动、相关依赖库,路径和环境变量都配置完整;而PyInstaller默认不会自动识别Selenium、selenium-wire的动态加载资源和隐式依赖,这些内容没被打包进exe,其他电脑没有匹配的本地环境,就会直接抛出「Failed to execute script WS.py」的通用错误,和你用不用虚拟环境打包没有直接关系。

分步修复方案(新手直接照着操作即可)
  • 第一步:显式指定所有隐式依赖,别让PyInstaller自动扫描猜依赖
    不要直接用最简打包命令,先把selenium、selenium-wire及其关联的动态导入库全部加到隐藏导入参数里,基础打包命令参考如下:

    pyinstaller -D --hidden-import=selenium --hidden-import=seleniumwire --hidden-import=selenium.webdriver --hidden-import=selenium.webdriver.chrome.service --hidden-import=selenium.webdriver.chrome.options --hidden-import=blinker --hidden-import=h11 --hidden-import=h2 --hidden-import=certifi --hidden-import=OpenSSL WS.py
    

    注:selenium-wire依赖的blinker、h11、h2、certifi、OpenSSL都是动态加载的,PyInstaller默认扫描不到,不手动加就会漏依赖。

  • 第二步:解决浏览器驱动适配问题
    不要用Selenium默认的自动下载驱动逻辑,这个逻辑在其他电脑上大概率失败:要么没网拉取驱动,要么权限不足写不了缓存目录,要么对方电脑浏览器版本和驱动不匹配。正确操作如下:

    1. 下载和Chrome大版本匹配的chromedriver.exe,放到WS.py同目录下
    2. 修改代码里的驱动初始化逻辑,写死相对路径,保证开发环境和打包后的exe环境都能正确找到驱动:
    import sys
    import os
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    
    # 自动识别当前运行环境的基础路径
    if getattr(sys, 'frozen', False):
        base_path = os.path.dirname(sys.executable)
    else:
        base_path = os.path.dirname(os.path.abspath(__file__))
    driver_path = os.path.join(base_path, 'chromedriver.exe')
    service = Service(driver_path)
    driver = webdriver.Chrome(service=service)
    
    1. 打包命令追加附加二进制参数--add-binary "chromedriver.exe;.",保证驱动会被打包到对应路径。
  • 第三步:补全selenium-wire的证书文件
    selenium-wire默认自带根证书用于HTTPS抓包,这两个证书文件PyInstaller完全识别不到,漏了就会直接启动崩溃:

    1. 打开你的虚拟环境目录,找到Lib/site-packages/seleniumwire/cert/路径,把里面的ca.crt和ca.key两个文件复制出来,在WS.py同目录新建cert文件夹,把两个证书放进去
    2. 打包命令追加附加资源参数--add-data "cert/*;seleniumwire/cert/",让打包后的程序能在对应路径找到证书。
  • 第四步:补全系统运行库
    如果对方电脑是纯净版Windows,没装VC++ 2015-2022版本的运行库,也会触发这类报错,安装对应版本的x86/x64 VC++运行库即可解决。

快速定位具体报错的方法

你现在看到的是PyInstaller关闭控制台后抛出的通用错误提示,看不到具体报错原因。打包时暂时去掉-w(无控制台)参数,打包出带控制台窗口的版本,在其他电脑运行时,控制台会直接打印具体缺失的模块、文件路径,照着缺的内容补就行,不用盲目试错。

注意事项:

  1. 不要单独把exe文件从dist目录拽出来发送,用-D模式打包后,要把dist目录下和exe同名的整个文件夹压缩后发送,保证所有依赖文件和exe在同一目录层级
  2. 新手不要强行用-F参数打单文件exe,单文件模式每次运行都会把资源解压到系统临时目录,很容易被安全软件误删导致报错,稳定性远低于文件夹模式
  3. 如果对方电脑安装了360、腾讯电脑管家这类安全软件,第一次运行时要允许exe的所有操作,避免安全软件拦截驱动、证书文件导致运行失败

内容的提问来源于stack exchange,提问作者Wet Sockys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:51:06