当前位置: 首页 > news >正文

AttributeError: module ‘smtplib‘ has no attribute ‘SMTP_SSL‘ 解决方法

pre 1,Verify smtplib in Python REPL:
python3 -c "import smtplib; print('SMTP_SSL available' if hasattr(smtplib, 'SMTP_SSL') else 'SMTP_SSL missing')"

输出SMTP_SSL missing,一顿环境和条件的监测操作:

which python3

/usr/local/bin/python3

1. 检查 smtplib.py 是否完整
python3 -c "import smtplib; print(smtplib.__file__)"

/usr/local/lib/python3.9/smtplib.py

运行以下命令检查 smtplib.py 是否包含 SMTP_SSL

grep "SMTP_SSL" /usr/local/lib/python3.9/smtplib.py

有输出,说明文件正常,可能是Python加载了错误的版本

python3 -c "from smtplib import SMTP_SSL; print('SMTP_SSL is available')"

false

python3 -c "import sys; print(sys.path)"

['', '/usr/local/lib/python39.zip', '/usr/local/lib/python3.9', '/usr/local/lib/python3.9/lib-dynload', '/usr/local/lib/python3.9/site-packages']

python3 位于 /usr/local/bin/python3,但 smtplib 在 /usr/local/lib/python3.9/ 下。同时,sys.path 显示Python的库路径包含 /usr/local/lib/python3.9,但 SMTP_SSL 仍然缺失,可能是文件损坏或版本不匹配。

/usr/local/bin/python3.9 -c "import sys; print(sys.version); import ssl; print(ssl.OPENSSL_VERSION)"

/usr/local/bin/python3.9 -c "import sys; print(sys.version); import ssl; print(ssl.OPENSSL_VERSION)"

  No module named '_ssl' 问题已经超出了简单的 smtplib 模块损坏,而是 Python 3.9 的 SSL 模块完全缺失ModuleNotFoundError: No module named '_ssl'),这会导致所有依赖 SSL/TLS 的功能(包括 SMTP_SSL)不可用。

  • _ssl 模块缺失:Python 编译时未正确链接 OpenSSL 库,Python无法导入_ssl模块,表明SSL支持未正确编译。

2:清除冲突路径

检查并清理 PYTHONPATH

echo $PYTHONPATH  # 查看是否有自定义路径
unset PYTHONPATH  # 临时禁用(测试用)

echo $PYTHONPATH 输出为空,说明当前没有自定义的 Python 模块搜索路径干扰,无冲突。这种情况下,SMTP_SSL 缺失的问题更可能是由于 Python 环境本身异常 或 字节码缓存损坏 导致的

3. 删除字节码缓存

清除可能损坏的 .pyc 文件:

find /usr/local/lib/python3.9 -name "smtplib*.pyc" -delete
find /usr/local/lib/python3.9 -type d -name "__pycache__" -exec rm -rf {} +

4. 手动验证 smtplib.py 内容

确认文件内容完整:

sudo grep -A 10 "class SMTP_SSL" /usr/local/lib/python3.9/smtplib.py

解决方案(分步操作)

第一步:确认OpenSSL开发包完整安装
# 检查openssl-devel是否安装
rpm -qa | grep openssl-devel

# 如果没有输出,安装开发包
sudo yum install openssl-devel -y

# 确认openssl头文件位置
ls /usr/include/openssl/ssl.h
第二步:彻底重装Python 3.9(带SSL支持)
# 进入源码目录
cd /usr/local/src/Python-3.9.16

# 彻底清理旧编译
make distclean

# 配置时显式指定openssl路径
./configure \
    --enable-optimizations \
    --with-openssl=/usr \
    --with-ssl-default-suites=openssl

# 编译安装(使用altinstall避免覆盖系统python)
make -j$(nproc)
sudo make altinstall
第三步:验证SSL模块
# 检查_ssl模块是否存在
ls /usr/local/lib/python3.9/lib-dynload/_ssl*.so

# 测试SSL功能
/usr/local/bin/python3.9 -c "import ssl; print(ssl.OPENSSL_VERSION)"

第四步:解决pip路径警告(可选)
# 将/usr/local/bin加入PATH
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
 

关键检查点

检查项命令期望结果
OpenSSL开发包rpm -qa | grep openssl-devel显示已安装的openssl-devel包
OpenSSL头文件ls /usr/include/openssl/ssl.h文件存在
Python SSL模块ls /usr/local/lib/python3.9/lib-dynload/_ssl*.so存在_ssl共享库
SSL功能测试python3.9 -c "import ssl; print(ssl.OPENSSL_VERSION)"显示OpenSSL版本号

检查日志

最终验证

成功编译后,你应该能看到:

 /usr/local/bin/python3.9 -c "import ssl; print(ssl.OPENSSL_VERSION)" 

http://www.dtcms.com/a/107534.html

相关文章:

  • AI小白的第十天:影响模型泛化能力的因素以及对策
  • spring boot 集成redis 中RedisTemplate 、SessionCallback和RedisCallback使用对比详解,最后表格总结
  • 系统思考与时间管理
  • 在MFC中使用Qt(五):MFC和Qt的共存和交互
  • 经典算法 最长公共子序列问题
  • GPU与CUDA对应
  • 阿里云服务器对接高防的时候可能会出现的问题
  • 鸿蒙应用元服务开发-Account Kit 常见问题说明
  • BRC认证是什么?如何获得BRC认证?对企业发展的好处
  • 解决Oracle PL/SQL中“表或视图不存在“错误的完整指南
  • 数据分析与知识发现 论文阅读【信息抽取】
  • OSD显示
  • 动态规划——区间DP
  • RedisTemplate 的 6 个可配置序列化器属性对比
  • apk签名与对齐
  • android databinding使用教程
  • modelscope环境准备--装conda、内网穿透、配置HuggingFace
  • 在线sql 转 rust 模型(Diesel、SeaORM),支持多数据 mysql, pg等
  • Java 大视界 -- Java 大数据在智能教育自适应学习平台中的用户行为分析与个性化推荐(169)
  • 合并空值运算符??
  • 爬虫【Scrapy框架的概念与执行流程】
  • c++中%符号使用的注意事项/易错点
  • limma差异分析
  • Scala面向对象
  • 多层内网渗透测试虚拟仿真实验环境(Tomcat、ladon64、frp、Weblogic、权限维持、SSH Server Wrapper后门)
  • 鸿蒙开发_TS快速入门_TS中模块化操作_模块的导入导出---纯血鸿蒙HarmonyOS5.0工作笔记008
  • MySQL主从复制(三)
  • 【Axure元件分享】时间范围选择器
  • 阿里云国际站代理商:模型训练中断数据丢失怎么办?
  • DAY 34 leetcode 349--哈希表.两个数组的交集