update-notifier-common配置失败且因依赖无法卸载的安全解决方法求助
update-notifier-common配置失败且因依赖无法卸载的安全解决方法求助
兄弟,我遇到过几乎一模一样的坑!先别着急卸载——你看那堆反向依赖,真卸载了搞不好Ubuntu Server的核心组件都会出问题。咱们先搞清楚根源:
从报错里的AttributeError: module 'collections' has no attribute 'Mapping'就能看出来,这是Python版本兼容性问题:在Python 3.10及以后的版本中,collections.Mapping这个类被移到了collections.abc.Mapping下面,但系统里的/usr/lib/python3/dist-packages/Debian/deb822.py还在沿用旧的引用方式,导致update-notifier-common的后置安装脚本直接崩了,进而卡住了包配置流程。
给你两个安全的解决思路,按顺序试:
方法一:临时修复Python文件的兼容性问题(最直接)
这个方法不用动任何包,只修改出问题的Python模块代码:
- 打开那个出问题的文件:
sudo nano /usr/lib/python3/dist-packages/Debian/deb822.py - 找到第78行左右的这段代码:
把它改成:class TagSectionWrapper(collections.Mapping):
或者更稳妥的,在文件开头的导入部分(大概第10行左右)添加兼容代码:class TagSectionWrapper(collections.abc.Mapping):# 兼容Python3.10+的collections.Mapping变动 try: from collections.abc import Mapping except ImportError: from collections import Mapping - 按
Ctrl+O保存,Ctrl+X退出编辑器。 - 重新配置所有未完成的包:
这时候sudo dpkg --configure -aupdate-notifier-common应该能顺利完成配置了。
方法二:检查系统默认Python版本(如果方法一没解决)
看你加了deadsnakes的PPA,大概率是把高版本Python(比如3.10+)设成了系统默认的python3,而Ubuntu 18.04原生的Python3.6才是适配系统脚本的版本:
- 先看当前默认Python3版本:
python3 --version - 如果显示的是3.10+,用原生Python3.6手动跑一遍出问题的脚本:
sudo python3.6 /usr/lib/update-notifier/package-data-downloader - 再重新配置包:
要是之后不想被高版本Python干扰,还可以用sudo dpkg --configure -aupdate-alternatives把Python3切回原生版本。
最后提醒
千万别硬删update-notifier-common!你列的反向依赖里有ubuntu-server这种核心组件,强制卸载会把系统搞崩的。先从Python兼容性入手,这才是问题的本质~
备注:内容来源于stack exchange,提问作者FeDos
相关产品推荐
相关产品推荐

