Pop!_OS 22.04切换默认Python至3.11后sudo apt update报错求助
解决Pop!_OS 22.04切换Python3.11后
apt update报错问题 问题原因
系统自带的/usr/lib/cnf-update-db脚本依赖Python3.10的apt_pkg模块,当你将默认python3指向3.11后,脚本调用的Python环境中没有这个模块,因此抛出ModuleNotFoundError。
解决方案
方案1:为Python3.11安装apt_pkg兼容模块
- 安装Python3.11开发依赖:
sudo apt install python3.11-dev python3-apt - 找到
apt_pkg的实际文件路径:
输出示例:find /usr/lib/python3/dist-packages -name "apt_pkg.*"/usr/lib/python3/dist-packages/apt_pkg.cpython-310-x86_64-linux-gnu.so - 创建软链接到Python3.11的模块目录:
注意:替换命令中的文件名与你实际找到的一致。sudo ln -s /usr/lib/python3/dist-packages/apt_pkg.cpython-310-x86_64-linux-gnu.so /usr/lib/python3.11/site-packages/apt_pkg.so
方案2:修改cnf-update-db脚本的Python版本
直接指定脚本使用Python3.10运行,不受默认版本影响:
- 编辑脚本文件:
sudo nano /usr/lib/cnf-update-db - 将第一行的
#!/usr/bin/python3修改为#!/usr/bin/python3.10 - 保存退出(按
Ctrl+O回车确认,Ctrl+X退出)
方案3:保留系统默认Python3.10,按需使用3.11
如果不需要全局默认3.11,可通过以下方式使用:
- 别名方式:在
~/.bashrc或~/.zshrc中添加:
执行alias python3='python3.11'source ~/.bashrc生效后,普通用户环境下python3指向3.11,而sudo仍使用系统默认的3.10,不影响apt相关脚本。 - 虚拟环境方式:创建指定Python3.11的虚拟环境:
激活后环境内默认使用Python3.11。python3.11 -m venv my_project_env source my_project_env/bin/activate
验证
执行以下命令切换回Python3.11为默认:
sudo update-alternatives --config python3
选择对应Python3.11的序号后,运行sudo apt update,确认错误消失。
内容的提问来源于stack exchange,提问作者Rezwoan Faisal
相关产品推荐
相关产品推荐

