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

requests-html爬虫脚本报错No module named 'email.utils'

问题定位与解决方案

核心根因

从错误栈可确认,你在存放测试脚本的D:/Python目录下,存放了一个开头导入smtplib的自定义邮件测试脚本,且将其命名为email.py,这个自定义文件完全遮挡了Python内置的email标准库包,是所有报错的源头:

  • Python加载模块时,会优先检索脚本所在的当前目录,因此导入email时会跳过系统内置的email包,直接加载同目录下你自己写的email.py单文件
  • 单文件的email.py本质是普通模块,不具备包的层级结构,自然不存在email.utils这个子模块,因此触发ModuleNotFoundError: No module named 'email.utils'; 'email' is not a package报错
  • 你之前在IDLE环境能正常运行,是因为IDLE启动时的工作目录并非存储email.py的D:/Python目录,不会触发模块路径的遮挡逻辑;直接独立运行requests-render-demo.py时,脚本所在目录会被加入模块搜索路径的最优先位置,直接触发冲突。
  • 你之前执行pip install email报找不到发行版的问题是完全正常的:email本身就是Python自带的标准库组成部分,PyPI平台从未独立发布过这个包,根本不需要额外安装,这个操作是因为模块被遮挡产生的错误判断。

分步解决操作

  • 打开D:/Python目录,找到那个自定义的email.py脚本,将其重命名为不与Python内置库重名的名称(比如smtp_test_demo.py),同时删除该目录下__pycache__文件夹中所有和email相关的缓存文件
  • 退出当前所有正在运行的Python环境,打开系统命令提示符,切换到非D:/Python的任意目录(比如系统用户主目录),启动Python交互环境执行import email.utils,确认无报错输出,代表内置模块已经恢复正常加载
  • 回到测试脚本的目录运行原代码,如果需要保持之前设置的渲染超时参数,将render调用补全为如下形式,匹配你之前在IDLE中验证过的运行配置:
r.html.render(sleep=1, keep_page=True, scrolldown=1, timeout=60)
  • 确认pyppeteer对应的chromium缓存路径正常:之前在IDLE环境中安装的chromium默认存储在用户目录下的.pyppeteer隐藏文件夹中,独立运行脚本时只要Python环境一致,无需重复安装即可正常调用。

避坑提醒

  • 编写自定义脚本时,绝对不要将文件命名为和Python标准库、第三方库完全重名的名称,常见的易冲突名称包括email、os、sys、json、csv、requests等,这类命名会直接触发模块优先级遮挡问题
  • 不要尝试通过pip安装Python标准库自带的模块,所有标准库模块都随Python安装包内置,不存在独立的PyPI发行版,尝试安装时必然会触发"No matching distribution found"的报错

内容的提问来源于stack exchange,提问作者Uttam Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 20:06:05