几天前我安装了 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
完全的!