Windows环境下使用Python Cryptography模块遇NameError问题求助
问题解决方法
根源分析
Cryptography 1.12是2016年发布的老旧版本,完全不兼容Python 3.10。Python 3.10已移除smtplib.encode_base64函数,而旧版本Cryptography内部仍在调用该函数,导致触发NameError。
解决步骤
1. 升级Cryptography到兼容版本
这是最直接且推荐的方案,打开Windows命令提示符执行:
pip install --upgrade cryptography
Cryptography 3.4.8及以上版本正式支持Python 3.10,升级完成后即可正常导入cryptography.fernet.Fernet。
2. (不推荐)手动修复依赖问题(仅当无法升级时)
如果因特殊需求必须保留Cryptography 1.12,需找到Cryptography内部调用smtplib.encode_base64的代码位置,将其替换为base64.b64encode:
- 找到Python安装目录下
Lib\site-packages\cryptography相关文件(具体位置需根据报错调用栈定位) - 将所有
from smtplib import encode_base64或smtplib.encode_base64替换为base64.b64encode,注意encode_base64默认会添加换行,替换后需手动处理换行逻辑。
验证
升级或修改后,重新运行脚本,导入cryptography.fernet.Fernet即可正常执行。
内容的提问来源于stack exchange,提问作者ed.vcnt
相关产品推荐
相关产品推荐

