尝试 sudo apt-get update 时出错 - 与 Python 相关?

尝试 sudo apt-get update 时出错 - 与 Python 相关?

几天前我安装了 Ubuntu 18.04,在尝试配置它并安装新的软件包和软件时,我想我做错了什么。我认为这可能与安装 python 有关。无论如何,gnome-terminal 或 gnome-tweaks 都无法启动了。此外,当我尝试更新(sudo apt-get update)时,它给了我以下错误:

sh 1: /usr/lib/cnf-update-db: not found
Reading package lists... Done
E: Problem executing scripts APT::Update::Post-Invoke-Succes 'if /usr/bin/test -w /var/lib/command-not-found -a -e /usr/lib/cnf-update-db > /dev/null; fi'
E: Sub-process returned an error code

我对 Linux 还比较陌生,所以我不知道该如何解决这个问题。有什么想法吗?甚至可以恢复默认配置/设置吗?

答案1

这是因为由@guiverc 建议,很可能与 Python 版本有关。现在似乎很多 Python 教程都建议将默认的 Python 版本从 2 更改为 3。虽然这对于 Python 开发来说很好也很实用,但它会破坏在安装过程中使用 Python 2 脚本的软件包。

因此请检查链接/usr/bin/python指向的位置:

$ ls -la /usr/bin/python
lrwxrwxrwx 1 root root 9 Jan 24  2017 /usr/bin/python -> python2.7

它应该指向 python2,而不是任何 python3 可执行文件。如果它指向 python3,则执行以下操作(男人):

$ sudo rm -f /usr/bin/python
$ sudo ln -s /usr/bin/python2.7 /usr/bin/python

此后,它将apt-get重新开始工作。

Python 解释器版本背景

许多脚本使用舍邦控制哪个解释器用于执行以下脚本。在大多数 Python 2 脚本中,使用以下几行:

#!/usr/bin/env python

对于 Python 3,使用以下 shebang:

#!/usr/bin/env python3

如果将 Python 2 ( /usr/bin/python -> python2.7) 解释器的默认链接更改为任何版本的 Python 3,则所有“旧”的 Python 2 脚本将停止工作

Python 版本和 Ubuntu 版本

这个答案来自 2018 年...因此它适用于 Ubuntu 18.04 以及可能更旧的版本。对于 Ubuntu 20.04,python v2 或多或少已被弃用,必须与 meta 包一起安装sudo apt install python-is-python2。此外,/usr/bin/python如果仅安装了 python v3,则链接不存在。

因此可以肯定地说:这个答案对于 python3 和高于 18.04 的 Ubuntu 版本无效。

答案2

就我而言,让 python 指向 python2 只会导致稍微不同的错误消息:

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'

我已经安装了 python 3.9,为我解决这个问题的方法是让 python3 指向 python3.8 而不是 python3.9:

$ ls -l /usr/bin/python*
lrwxrwxrwx 1 root root      16 Dec 22 13:53 /usr/bin/python -> /usr/bin/python2
lrwxrwxrwx 1 root root      18 Dec 22 13:54 /usr/bin/python2 -> /usr/bin/python2.7
-rwxr-xr-x 1 root root 3674216 Mar  8  2021 /usr/bin/python2.7
lrwxrwxrwx 1 root root      18 Dec 22 13:56 /usr/bin/python3 -> /usr/bin/python3.8
-rwxr-xr-x 1 root root 5490488 Nov 26 21:14 /usr/bin/python3.8
lrwxrwxrwx 1 root root      33 Nov 26 21:14 /usr/bin/python3.8-config -> x86_64-linux-gnu-python3.8-config
-rwxr-xr-x 1 root root 5803968 Nov 23 16:27 /usr/bin/python3.9

答案3

就我而言

python 链接坏了,因此我创建了如下软链接

ln -s /usr/bin/python2.7 /usr/bin/python2

ln -s /usr/bin/python3.8 /usr/bin/python3

完全的!

相关内容