如何修复“ModuleNotFoundError:没有名为“apt_pkg”的模块?

问题描述 投票:0回答:10

我正在运行代码

sudo apt update
并获取错误

ModuleNotFoundError:没有名为“apt_pkg”的模块。

请帮我解决这个问题。

sudo apt update


Hit:20 http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu bionic InRelease       
Fetched 93,3 kB in 2s (42,4 kB/s)                   
Traceback (most recent call last):
  File "/usr/lib/cnf-update-db", line 8, in <module>
    from CommandNotFound.db.creator import DbCreator
  File "/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py", line 11, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Reading package lists... Done
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
E: Sub-process returned an error code
python ubuntu-18.04
10个回答
89
投票

就我而言,问题是由于将 python 版本从 3.6 升级到 3.8 造成的。

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2

sudo update-alternatives --config python3

解决者:

将 python 版本设置回 3.6


76
投票

刚刚重新安装了python3-apt,错误就消失了

sudo apt remove python3-apt

重新启动然后安装,

sudo apt install python3-apt

注意: 仅当 python3 是新安装依赖项时才使用。否则它可能会破坏系统上现有的基于 python3 的设置。不过,使用

--reinstall
是更安全的选择。


30
投票

与某些类似,我有 python3.8 和 python3.11,其中 python 和 python3 都是 /usr/bin 中 python3.11 的符号链接

我运行了以下命令解决了问题:

cd /usr/lib/python3/dist-packages/
sudo cp apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.so

21
投票

就我而言,问题是我删除了 Ubuntu 18.04 上的原始

/usr/bin/python3
符号链接,并将其替换为指向
python3.8
的符号链接。当我恢复原来的指向
python3.6

时,问题消失了

我的要点是:如果您需要某些库或模块的自定义版本,请将其安装在隔离环境中,不要搞乱系统设置。否则,您将面临损坏某些东西的风险,只有在稍后很难弄清楚到底出了什么问题时才能注意到。


5
投票

您需要更改Python版本(3.6适用于我)。但是,如果你想要默认的另一个 python 版本(例如 3.8):

尝试编辑文件

/usr/bin/add-apt-repository
并使用特定版本的Python(如3.6)更改行
#!/usr/bin/python3

要更改此文件,请打开文本编辑器(如 nano):

sudo nano /usr/bin/add-apt-repository

#!/usr/bin/python3
替换为您的 python 版本(本例中为 3.6)

#!/usr/bin/python3.6

保存文件。

应该可以。


4
投票

我遇到了这个问题,这是因为我安装了 python 3.6.9 和 3.5.2 (Ubuntu 16.04) 我也用过

sudo update-alternatives --config python3
不使用
auto
将其设置回
auto
解决了我的问题(然后给予 3.6.9 优先级是让最新版本的 python 默认运行的下一步) 新用户:我无法回复其他评论:(


4
投票

该问题是由于将 python3.7 或更高版本设置为默认 python3 引起的。 @bluevalien 就像你说的我必须使用

sudo update-alternatives --config pyhton3
并且我将 python3.6 设置为默认值。抱歉,我无法发表评论,因为我也是新用户


4
投票

我在运行任何命令时也遇到此错误,它表明该文件位于

/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py

无法导入 apt_pkg

可能有多种原因导致此问题,但我建议不要直接删除并重新安装 python3-apt,可能会出现问题,第一次尝试可能是检查您之前是否已将默认 python3 更新到更高版本,就像我一样,我已将默认的 python3 更新为 python3.10,这就是出现此错误的原因。奔跑吧

sudo update-alternatives --config python3

要重新选择默认值,通过选择旧的(我的python3.8),“no module named apt_pkg”错误已被消除。

顺便说一句,一个提示也是给我自己的一个备忘录,下次当有人想在新的 python 环境上运行该进程时,使用 conda 创建一个虚拟环境可能会非常安全和美好,不会与当前操作系统(Ubuntu以我20.04为例)。


0
投票

当我作为超级用户时,我也遇到了“cp:无法统计'apt_pkg.cpython-36m-x86_64-linux-gnu.so':没有这样的文件或目录”的问题。我在没有 sudo 的情况下执行了相同的命令命令并且运行良好。

我的系统中有python 3.5、3.6和3.7,所以我不认为python的版本有问题。

cp apt_pkg.cpython-36m-x86-64-linux-gnu.so.so apt_pkg.so

问候。


0
投票

有时谷歌搜索比chatgpt-4o更好。 解决方案很简单,正如本问答所示

sudo apt remove python3-apt
sudo apt install python3-apt

chatgpt-4o 给了我错误的方向和错误的答案。我花了一些时间来解决它的错误解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.