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

使用PyInstaller打包含speedtest-cli的Python程序时遇__builtin__模块错误

解决Python3.12打包speedtest-cli桌面应用的报错问题

1. 修复__builtin__模块找不到的问题

__builtin__是Python2的内置模块,Python3中已更名为builtins,直接替换单个文件的引用可能无法覆盖依赖链,试试这两种方案:

  • 虚拟模块映射法
    在项目根目录新建__builtin__.py文件,写入一行代码:
    from builtins import *
    
    打包时将这个文件添加到auto-py-to-exe的文件列表中,让打包程序识别这个模块。
  • 源码补丁法
    用pip show speedtest-cli查看库的安装路径,找到核心文件(如speedtest.py),全局替换所有__builtin__为builtins,并确保文件顶部有import builtins语句。

2. 解决AttributeError: 'NoneType' object has no attribute 'fileno'

这个错误是因为GUI程序打包后无控制台环境,speedtest-cli尝试访问标准输入输出的文件描述符时得到None,可以这样处理:

  • 重定向标准流
    在主程序入口最顶部添加代码:
    import sys
    import os
    
    # 将空设备作为标准流的替代,避免无控制台报错
    if sys.stdin is None:
        sys.stdin = open(os.devnull, 'r')
    if sys.stdout is None:
        sys.stdout = open(os.devnull, 'w')
    if sys.stderr is None:
        sys.stderr = open(os.devnull, 'w')
    
  • 临时测试控制台模式
    在auto-py-to-exe中将"Console Window"改为"Console Based",打包后运行验证。如果正常,说明是无控制台环境导致的流问题,再用上面的重定向代码改回GUI模式。

3. 适配Python3.12的版本兼容处理

Python3.12移除了部分旧语法和模块,可能speedtest-cli版本不兼容:

  • 升级到最新版本:
    pip install --upgrade speedtest-cli
    
  • 如果最新版仍有问题,尝试安装第三方维护的Python3适配版本:
    pip install speedtest-cli2
    

4. 打包时的额外配置

在auto-py-to-exe的"Advanced"选项中,添加以下隐藏导入项:

  • builtins
  • speedtest
  • sys
    确保所有依赖模块被正确打包进exe文件。

内容的提问来源于stack exchange,提问作者Kkj Oll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:24:58