Ошибка при попытке обновления sudo apt-get - связано с Python?

Я надеюсь, что вы можете мне помочь. Я установил Ubuntu 18.04 несколько дней назад и, пытаясь настроить его и установить новое упакованное и программное обеспечение, я думаю, что сделал что-то плохое. Я думаю, что это может быть связано с установкой Python. В любом случае, ни гном-терминал, ни гном-твики больше не могут запускаться. Кроме того, когда я пытаюсь обновить (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, поэтому понятия не имею, как мне это исправить. Любая идея? Даже восстановить дефолтные конфигурации / настройки?

Большое спасибо!

3 ответа

Решение

Это, как полагает guiverc, наиболее похожая версия Python. В этот день в нем представлено множество руководств по Python, предлагающих изменить версию Python по умолчанию с 2 на 3. Хотя это полезно и практично для разработки на Python, оно ломает систему пакетов.

Так что проверь где ссылка /usr/bin/python готовится к:

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

Он должен указывать на python2, а не на любой исполняемый файл python3. Если он указывает на python3, сделайте следующее ( man ln):

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

После этого apt-get снова начнет работать.

В моем случае установка 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

В моем случае

ссылка на python была сломана. Итак, я сделал мягкую ссылку, как показано ниже.

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

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

полный!

Другие вопросы по тегам