Azure虚拟机上Ubuntu 18.04.6 LTS执行apt升级及neofetch时出现ModuleNotFoundError: No module named 'apt_pkg'错误
Azure虚拟机上Ubuntu 18.04.6 LTS执行apt升级及neofetch时出现ModuleNotFoundError: No module named 'apt_pkg'错误
我完全明白你遇到的困扰了——安装Python 3.10之后,系统默认的Python 3版本被切换,导致依赖系统原生Python版本的apt_pkg模块找不到,进而影响了apt命令和neofetch的正常运行。下面给你几个实用的解决办法:
方法一:恢复系统默认的Python 3版本(最稳妥的方案)
Ubuntu 18.04默认搭载的是Python 3.6,python3-apt就是针对这个版本编译的,把默认Python切回3.6就能解决问题:
- 先查看当前Python 3的指向,确认是否被改成了3.10:
ls -l /usr/bin/python3 - 如果输出显示指向
python3.10,就删除当前的软链接,重新关联到Python 3.6:sudo rm /usr/bin/python3 sudo ln -s /usr/bin/python3.6 /usr/bin/python3 - 最后重新安装一次
python3-apt,确保模块和默认Python版本正确关联:sudo apt-get install --reinstall python3-apt
方法二:为Python 3.10适配apt_pkg模块(保留3.10作为默认)
如果你想继续用Python 3.10作为系统默认版本,可以通过以下方式让它识别apt_pkg:
快捷方式:创建软链接
- 先找到系统中原本的
apt_pkg编译文件:
你会得到类似find /usr/lib/python3 -name "apt_pkg*.so"/usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.so的路径 - 将这个文件软链接到Python 3.10的站点包目录:
注意替换成你实际查到的文件名sudo ln -s /usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.so /usr/lib/python3.10/site-packages/apt_pkg.so
稳妥方式:重新编译安装python3-apt
如果软链接方式出现兼容性问题,可以尝试源码编译:
- 先安装编译所需的依赖:
sudo apt-get install python3-dev libapt-pkg-dev - 下载
python3-apt的源码包:apt-get source python3-apt - 进入下载好的源码目录(比如
cd python3-apt-1.6.5ubuntu0.7,目录名根据你下载的版本调整): - 针对Python 3.10编译并安装:
sudo python3.10 setup.py install
问题根源说明
之所以会出现这个错误,是因为python3-apt是和系统默认的Python版本绑定编译的。Ubuntu 18.04默认的Python 3是3.6,当你安装Python 3.10并将其设为python3的默认指向后,系统执行apt相关的Python脚本时会调用3.10,但3.10并没有对应的apt_pkg模块,因此抛出了ModuleNotFoundError。
备注:内容来源于stack exchange,提问作者FeDos




