You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修复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

火山引擎 最新活动