如何修复Ubuntu 20.04.6中的‘No module named 'apt_pkg'’错误?
如何修复Ubuntu 20.04.6中的‘No module named 'apt_pkg'’错误?
嘿,我太懂你这个糟心的问题了——手动升级Python版本后,apt_pkg找不到简直是高频坑,尤其是在Ubuntu 20.04这种自带Python 3.8的系统上。你之前试的python3-apt安装和PYTHONPATH设置没生效,核心原因是系统自带的python3-apt是针对默认Python 3.8编译的C扩展模块,和你装的Python 3.11完全不兼容,直接加路径根本认不出来。
给你几个靠谱的解决办法,按实用性排序:
1. 最快方案:用系统默认Python运行(如果场景允许)
Ubuntu 20.04默认的Python版本是3.8,python3-apt本来就是为它适配的,所以直接指定版本运行就行:
python3.8 -c "import apt_pkg; print('apt_pkg module is available.')"
如果你的脚本不需要强制用Python 3.11,这招零折腾,直接搞定。
2. 长期稳定方案:为Python 3.11重新编译安装python3-apt
因为apt_pkg是C扩展模块,必须和对应Python版本编译才能用,系统包只支持默认版本,所以得自己动手编译:
- 先装编译依赖:
sudo apt install python3.11-dev libapt-pkg-dev gcc - 下载python3-apt的源码包:
sudo apt source python3-apt - 进入下载好的源码目录(目录名开头是
python3-apt-,后面带具体版本号):cd python3-apt-* - 用Python 3.11配置并编译:
python3.11 setup.py build - 最后安装到Python 3.11的环境中:
sudo python3.11 setup.py install
编译完成后再跑你的测试命令,应该就能正常导入apt_pkg了。
3. 临时应急:创建软链接(不推荐长期用)
如果你急着用不想编译,可以试试软链接把系统的apt_pkg文件指向Python 3.11的目录,但要注意这可能因为版本ABI不兼容导致奇怪的运行错误,只能救急:
- 先找到系统里的
apt_pkg文件:
你会得到类似find /usr/lib/python3/dist-packages -name "apt_pkg*.so"/usr/lib/python3/dist-packages/apt_pkg.cpython-38-x86_64-linux-gnu.so的路径 - 把它软链接到Python 3.11的site-packages目录:
sudo ln -s /usr/lib/python3/dist-packages/apt_pkg.cpython-38-x86_64-linux-gnu.so /usr/local/lib/python3.11/site-packages/apt_pkg.so
测试能运行就暂时用,但长期还是建议用编译的方法,避免后续出问题。
另外提一句,你之前设的PYTHONPATH之所以没用,是因为那个路径里的apt_pkg是给3.8编译的,3.11根本加载不了跨版本的C扩展模块,所以加了也白搭。
备注:内容来源于stack exchange,提问作者Alex




