Ubuntu Jammy 单用户Python环境损坏:无法从collections导入Mapping
我之前遇到过几乎一模一样的问题,这大概率是你用户目录下的Python依赖包版本太旧,不兼容Python 3.10导致的——毕竟Python 3.10已经把collections.Mapping移到collections.abc模块里了,而你~/.local/lib/python3.10/site-packages里的旧包还在沿用过时的导入写法。root用户用的是系统级的兼容包,所以没报错。下面是具体的排查和解决步骤:
第一步:确认问题根源
先定位到出问题的依赖包(从报错栈看是urllib3),检查你用户本地安装的版本:
pip3 show urllib3
如果显示的版本低于1.26.0(这个版本开始适配Python 3.10的新导入规则),那就是版本不兼容的核心问题。
第二步:升级用户本地的依赖包
运行以下命令,把报错链里涉及的所有依赖都升级到支持Python 3.10的最新版本:
pip3 install --upgrade urllib3 requests docker docker-compose
升级后这些包会自动使用from collections.abc import Mapping的正确语法,替代旧的导入方式。
第三步:如果升级无效,尝试临时禁用用户本地包
要是升级后问题还存在,可以先把用户本地的Python包目录重命名,测试是否恢复正常:
mv ~/.local/lib/python3.10/site-packages ~/.local/lib/python3.10/site-packages.bak
之后再尝试启动Virtual Machine Manager和运行docker-compose up -d。如果此时一切正常,说明是旧本地包的冲突导致的,你可以选两种处理方式:
- 直接删除备份目录,之后用系统包或重新安装兼容的用户级包;
- 逐步从备份里恢复必要的包,排查到底是哪个旧包引发的问题。
关于Virtual Machine Manager的启动问题
GNOME启动器加载的环境变量和命令行环境略有差异,可能导致它优先调用了用户本地的旧Python包。解决完上面的依赖问题后,这个启动异常应该也会跟着修复。如果还是不行,可以右键启动器→属性,检查VM Manager的启动命令,确保它调用的是系统Python(通常是/usr/bin/python3),而不是用户本地的~/.local/bin/python。
备注:内容来源于stack exchange,提问作者Diana P

