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

Windows平台PyInstaller打包exe运行报错:无法导入SelectorEventLoop

解决PyInstaller打包exe后ImportError: cannot import name 'SelectorEventLoop'的问题

我之前也踩过这个坑,PyInstaller在打包依赖websockets的Python脚本时,经常会漏掉asyncio的一些内部子模块,导致运行exe时出现这个导入错误。下面是几个亲测有效的解决方法:

方法一:通过命令行直接指定隐藏导入

打包的时候直接给PyInstaller加上--hidden-import参数,明确告诉它要包含asyncio.selector_events模块:

pyinstaller --hidden-import=asyncio.selector_events my.py

这个方法适合快速测试,不用手动修改配置文件。

方法二:修改.spec配置文件

如果已经生成了.spec文件(第一次打包后会自动生成),可以手动编辑它来添加隐藏导入:

  1. 找到你的my.spec文件,打开后定位到Analysis部分,类似这样:
    a = Analysis(
        ['my.py'],
        pathex=[],
        binaries=[],
        datas=[],
        hiddenimports=[],  # 这里是需要修改的位置
        hookspath=[],
        hooksconfig={},
        runtime_hooks=[],
        excludes=[],
        win_no_prefer_redirects=False,
        win_private_assemblies=False,
        cipher=block_cipher,
        noarchive=False,
    )
    
  2. 在hiddenimports列表中添加'asyncio.selector_events':
    hiddenimports=['asyncio.selector_events'],
    
  3. 保存文件后,用这个.spec文件重新打包:
    pyinstaller my.spec
    

这种方法适合需要多次打包的场景,一次修改后后续打包都能复用配置。

额外注意事项

  • 确保你在正确的虚拟环境中执行打包命令,websockets、asyncio等依赖都已正常安装;
  • 如果上述方法无效,可以尝试额外添加websockets的隐藏导入:--hidden-import=websockets,不过大部分情况下第一个隐藏导入就足以解决问题;
  • 打包完成后务必测试生成的exe文件,确认错误是否消失。

内容的提问来源于stack exchange,提问作者Sylvain Biehler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:17:05