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

Fer*_*do 6 package-management apt

我希望你能帮助我。几天前我安装了 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
Run Code Online (Sandbox Code Playgroud)

我对 Linux 比较陌生,所以我不知道如何解决这个问题。任何的想法?甚至恢复默认配置/设置?

非常感谢!

Sim*_*ler 6

正如@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
Run Code Online (Sandbox Code Playgroud)

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

$ sudo rm -f /usr/bin/python
$ sudo ln -s /usr/bin/python2.7 /usr/bin/python
Run Code Online (Sandbox Code Playgroud)

之后,apt-get将再次开始工作。

Python 解释器版本的背景

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

$ ls -la /usr/bin/python
lrwxrwxrwx 1 root root 9 Jan 24  2017 /usr/bin/python -> python2.7
Run Code Online (Sandbox Code Playgroud)

对于 Python 3,使用此shebang:

$ sudo rm -f /usr/bin/python
$ sudo ln -s /usr/bin/python2.7 /usr/bin/python
Run Code Online (Sandbox Code Playgroud)

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