导入keyring遇AttributeError:module 'io'无'text_encoding'属性
解决导入keyring时的AttributeError问题
问题详情
- 执行
import keyring时,反复抛出错误:AttributeError: module 'io' has no attribute 'text_encoding' - 错误定位到站点包中zipp库的
py310compat.py文件,路径为C:\Users*user_name*\AppData\Local\Programs\Python\Python39\lib\site-packages\zipp\py310compat.py,对应代码行:io.text_encoding if sys.version_info > (3, 10) else _text_encoding # type: ignore - 检查该文件代码无异常,怀疑io库版本过旧,但无法在站点包中找到io库文件夹;执行
print(io.__version__)返回AttributeError: module 'io' has no attribute '__version__',但import io可正常执行,推测问题与io库的加载或环境兼容性有关。
解决办法
1. 升级zipp库
这个问题本质是zipp库的版本兼容bug——旧版本zipp的Python版本判断逻辑在Python3.9下出错,错误尝试调用Python3.10才有的io.text_encoding属性。执行以下命令升级zipp:
pip install --upgrade zipp
2. 安装适配Python3.9的zipp版本
如果升级后仍有问题,可指定安装对Python3.9兼容性更稳定的版本:
pip install zipp==3.10.0
3. 排查io模块是否被干扰
标准库的io模块没有单独的版本号,也不会出现在站点包中(属于Python自带库)。如果import io正常但调用属性出错,可能是第三方库覆盖了io模块。执行以下代码查看io模块的实际加载路径:
import io print(io.__file__)
如果输出路径不是Python3.9自带的C:\Users*user_name*\AppData\Local\Programs\Python\Python39\lib\io.py,找到并删除该路径下的干扰文件即可。
内容的提问来源于stack exchange,提问作者user17312322
相关产品推荐
相关产品推荐

