安装/卸载Python包触发AttributeError:abc模块无update_abstractmethods属性
问题分析
问题根源是attrs库版本与Python 3.9不兼容:abc.update_abstractmethods是Python 3.10才新增的方法,但当前环境中的attrs库代码错误地在Python 3.9环境中触发了该方法调用(代码里的PY310版本判断逻辑失效或版本适配错误)。包管理操作会触发这段特定逻辑,导致报错;而现有脚本能正常运行,是因为业务代码未涉及到这段包管理时才会执行的逻辑。
解决方案
1. 临时修复恢复pip功能
找到文件C:\Users\user_name\AppData\Local\Programs\Python\Python39\lib\site-packages\attr\_make.py(注:原路径中的attr_make.py应为attr/_make.py的笔误),定位到build_class函数的末尾代码,替换为兼容Python 3.9的逻辑:
cls = self._patch_original_class() # 兼容Python3.9及以下版本,判断abc模块是否存在目标方法 if hasattr(self.abc, 'update_abstractmethods'): return self.abc.update_abstractmethods(cls) else: return cls
保存文件后,pip即可正常执行安装/卸载操作。
2. 降级attrs到Python3.9兼容版本
打开终端执行以下命令,安装适配Python3.9的稳定版attrs:
pip install attrs==21.4.0
该版本支持Python 3.6至3.10,可彻底解决版本不兼容问题。
3. 后续预防措施
- 安装依赖时指定兼容当前Python版本的范围,例如
pip install attrs<22.0(attrs 22.0+开始部分特性依赖Python3.10+) - 定期用
pip check命令排查依赖版本冲突
内容的提问来源于stack exchange,提问作者user17312322
相关产品推荐
相关产品推荐

