sudo apt-get update 出错;并且终端无法打开:Python 更新导致了这个问题?

sudo apt-get update 出错;并且终端无法打开:Python 更新导致了这个问题?

我陷入困境:-(我希望有人能帮助我。

我有一个运行良好的 Ubuntu 18.04 系统,其中装有 python2.7.17 和 python3.6.9。我想将我的 Python 升级到 3.8,所以我遵循了一些在线帮助。(例如:如何在 Lubuntu 18.04 中安装 Python 3.8?, 和这里:尝试 sudo apt-get update 时出错 - 与 Python 相关?

我安装了 Python3.8.0(来自 Ubuntu 渠道,而不是 PPA)。我安装了update-alternatives --config python3,一时心虚,又安装了update-alternatives --config python。结果,我的 python 设置导致终端无法打开。我取消了这些更改。我不得不使用 手动再次设置到 python2 的链接。$ sudo ln -s /usr/bin/python2.7 /usr/bin/python但问题仍然存在。

问题:目前,终端仍然无法打开,并且sudo apt-get update失败。:-(

(我确实已经打开了几个终端......但我担心重新启动系统,以免终端无法打开)

由于各种原因,我不得不继续使用 Ubuntu 18.04,无法重新安装。我该如何解决这个问题?任何帮助都非常感谢!谢谢!

当前设置如下:

avtester@a3computer:~$ update-alternatives --list python
update-alternatives: error: no alternatives for python
avtester@a3computer:~$ update-alternatives --list python3
/usr/bin/python3.6
/usr/bin/python3.8
avtester@a3computer:~$ 
...
avtester@a3computer:~$ ls -lt /usr/bin/python*
lrwxrwxrwx 1 root root      18 Nov 19 09:33 /usr/bin/python -> /usr/bin/python2.7
lrwxrwxrwx 1 root root      25 Nov 18 23:36 /usr/bin/python3 -> /etc/alternatives/python3
-rwxr-xr-x 2 root root 4526456 Oct  8 05:12 /usr/bin/python3.6
lrwxrwxrwx 1 root root      33 Oct  8 05:12 /usr/bin/python3.6-config -> x86_64-linux-gnu-python3.6-config
-rwxr-xr-x 2 root root 4526456 Oct  8 05:12 /usr/bin/python3.6m
lrwxrwxrwx 1 root root      34 Oct  8 05:12 /usr/bin/python3.6m-config -> x86_64-linux-gnu-python3.6m-config
-rwxr-xr-x 1 root root 3628976 Sep 30 06:38 /usr/bin/python2.7
lrwxrwxrwx 1 root root      33 Sep 30 06:38 /usr/bin/python2.7-config -> x86_64-linux-gnu-python2.7-config
-rwxr-xr-x 2 root root 4456208 Apr 17  2020 /usr/bin/python3.5
-rwxr-xr-x 2 root root 4456208 Apr 17  2020 /usr/bin/python3.5m
-rwxr-xr-x 1 root root 5203488 Oct 28  2019 /usr/bin/python3.8
lrwxrwxrwx 1 root root      33 Oct 28  2019 /usr/bin/python3.8-config -> x86_64-linux-gnu-python3.8-config
lrwxrwxrwx 1 root root      16 Oct 25  2018 /usr/bin/python3-config -> python3.6-config
lrwxrwxrwx 1 root root      10 Oct 25  2018 /usr/bin/python3m -> python3.6m
lrwxrwxrwx 1 root root      17 Oct 25  2018 /usr/bin/python3m-config -> python3.6m-config
lrwxrwxrwx 1 root root       9 Apr 16  2018 /usr/bin/python2 -> python2.7
lrwxrwxrwx 1 root root      16 Apr 16  2018 /usr/bin/python2-config -> python2.7-config
lrwxrwxrwx 1 root root      16 Apr 16  2018 /usr/bin/python-config -> python2.7-config
avtester@a3computer:~$ 
avtester@a3computer:~$ python --version
Python 2.7.17
avtester@a3computer:~$ python3 --version
Python 3.8.0
avtester@a3computer:~$ 


失败 sudo apt-get update在这儿:

avtester@a3computer:~$ sudo apt-get update
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease      
Hit:3 http://security.ubuntu.com/ubuntu bionic-security InRelease       
Hit:4 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease
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
avtester@a3computer:~$ 

更新 1 和 2 遵循一些帮助(参见:https://stackoverflow.com/questions/56218562/how-to-fix-modulenotfounderror-no-module-named-apt-pkg),我将我的python3替代方案重新映射到原始的python3.6而不是新安装的python3.8,如下所示:

avtester@a3computer:~$ ls -l /etc/alternatives/python3 
lrwxrwxrwx 1 root root 18 Nov 18 23:36 /etc/alternatives/python3 -> /usr/bin/python3.8
avtester@a3computer:~$ sudo update-alternatives --config python3
[sudo] password for avtester: 
There are 2 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.8   2         auto mode
  1            /usr/bin/python3.6   1         manual mode
  2            /usr/bin/python3.8   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/python3.6 to provide /usr/bin/python3 (python3) in manual mode
avtester@a3computer:~$ 
avtester@a3computer:~$ ls -l /etc/alternatives/python3 
lrwxrwxrwx 1 root root 18 Nov 19 10:37 /etc/alternatives/python3 -> /usr/bin/python3.6

现在,我可以打开终端并执行sudo apt-get install。但是,我看到的更新列表非常小?我不确定那是什么意思。

avtester@a3computer:~$ sudo apt-get update
[sudo] password for avtester: 
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease      
Hit:3 http://security.ubuntu.com/ubuntu bionic-security InRelease        
Hit:4 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease     
Reading package lists... Done                      
avtester@a3computer:~$ 

这是什么巫术?如果将系统更新python3到新版本,为什么系统会崩溃得这么厉害??

答案1

为了记录在案,请参阅更新 1 和 2 中的我的回答。

更新 1 和 2:

遵循一些帮助(参见:https://stackoverflow.com/questions/56218562/how-to-fix-modulenotfounderror-no-module-named-apt-pkg),我将我的python3替代方案重新映射到原始的python3.6而不是新安装的python3.8,如下所示:

avtester@a3computer:~$ ls -l /etc/alternatives/python3 
lrwxrwxrwx 1 root root 18 Nov 18 23:36 /etc/alternatives/python3 -> /usr/bin/python3.8
avtester@a3computer:~$ sudo update-alternatives --config python3
[sudo] password for avtester: 
There are 2 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.8   2         auto mode
  1            /usr/bin/python3.6   1         manual mode
  2            /usr/bin/python3.8   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/python3.6 to provide /usr/bin/python3 (python3) in manual mode
avtester@a3computer:~$ 
avtester@a3computer:~$ ls -l /etc/alternatives/python3 
lrwxrwxrwx 1 root root 18 Nov 19 10:37 /etc/alternatives/python3 -> /usr/bin/python3.6

现在我可以打开终端并执行sudo apt-get install,但是我看到的更新列表非常小?我不确定那是什么意思。

avtester@a3computer:~$ sudo apt-get update
[sudo] password for avtester: 
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease      
Hit:3 http://security.ubuntu.com/ubuntu bionic-security InRelease        
Hit:4 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease     
Reading package lists... Done                      
avtester@a3computer:~$ 

答案2

开始写评论,但已经太长了...:)

无论如何,Python 是一个相当重要的软件包,因为许多基础操作系统软件包都依赖于它。删除或弄乱 Python 会使其他应用程序失去其依赖性。

如果这些应用程序是必不可少的系统应用程序,并且它们是用 Python 编写的,而你的撤消导致它们缺少 Python 模块或者新的 Python 版本有重大变化,那么就会发生严重后果。

至于使用 Python 3.8,如果你真的需要它(例如你正在做一些开发),似乎最好在单独的环境(VM、容器)中使用它,或者你至少应该研究使用 Python 虚拟环境。从这个开始:

pip install virtualenv

至于 apt repos 的简短列表,它只是... 它所经过的 repos。如果你真的想要,你可以添加更多。

PS 很高兴你已经修复了这个问题,其实修复得相当快。你应该发布你自己的答案并修复它,以便其他人参考。

答案3

这是一个复合问题的典型例子,需要复合解决方案。

我刚刚经历了同样的事情,并使用了您的问题/答案(我在搜索神秘sh 1: /usr/lib/cnf-update-db: not found错误时找到的)和其他一些问题/答案来找出解决方案。

首先,我陷入了 update-alternatives 的混乱之中——在安装了 Python 3.7、3.8 和 3.9 之后,我只是在摆弄它。不知何故,我还弄乱了 python 的映射,它应该转到 2.7。

在我的例子中(Ubuntu 18.04),Python3 的替代方案破坏了 apt,所以我不得不

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

然后

sudo update-alternatives --config python3

选择 3.6.1。

然而,在我这样做之前,我尝试了另外 20 项专注于“修复软件包管理”的方法,因为神秘的sh 1: /usr/lib/cnf-update-db: not found错误通常是软件包出现某种问题的征兆。在这种情况下,根据互联网上陌生人的建议,我删除了一些与软件包相关的不同文件和目录。我在这里要指出的是,一般来说,互联网上陌生人的建议rm -rf anything应该被处理非常小心翼翼,但我并不小心。

无论如何,在解决了我的更新替代方案问题之后,apt-get 又可以“工作”了,但实际上并没有工作——我得到了一个非常短的列表,没有什么可以更新或安装。

需要做的是etc/apt/sources.list从命令行恢复,我只是从我的另一个(正在运行的)Ubuntu 18 系统中抓取它并将其复制进去。就我而言,该文件如下所示:

# deb cdrom:[Ubuntu 18.04.1 LTS _Bionic Beaver_ - Release amd64 (20180725)]/ bionic main restricted

# 请参阅 http://help.ubuntu.com/community/UpgradeNotes 了解如何升级到
# 发行版的较新版本。
deb http://ca.archive.ubuntu.com/ubuntu/ bionic main restricted
deb-src http://ca.archive.ubuntu.com/ubuntu/ bionic main restricted

## 最终版本发布后产生的主要错误修复更新
## 分配。
deb http://ca.archive.ubuntu.com/ubuntu/ bionic-updates 主要受限
# deb-src http://ca.archive.ubuntu.com/ubuntu/ bionic-updates 主要受限

## NB:这个存储库中的软件完全不受 Ubuntu 支持
## 团队。另外,请注意,宇宙中的软件将不会收到任何
## 来自 Ubuntu 安全团队的审查或更新。
deb http://ca.archive.ubuntu.com/ubuntu/ 仿生宇宙
# deb-src http://ca.archive.ubuntu.com/ubuntu/ 仿生宇宙
deb http://ca.archive.ubuntu.com/ubuntu/ bionic-updates universe
# deb-src http://ca.archive.ubuntu.com/ubuntu/ bionic-updates 宇宙

## NB:这个存储库中的软件完全不受 Ubuntu 支持
## 团队,并且可能不属于免费许可。请自行确认
## 您使用该软件的权利。另外请注意,
## multiverse 将不会收到来自 Ubuntu 的任何评论或更新
## 安全团队。
deb http://ca.archive.ubuntu.com/ubuntu/ bionic multiverse
# deb-src http://ca.archive.ubuntu.com/ubuntu/ bionic multiverse
deb http://ca.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
# deb-src http://ca.archive.ubuntu.com/ubuntu/ bionic-updates multiverse

## NB:此存储库中的软件可能尚未经过测试
## 与主版本一样广泛,尽管它包括
## 一些应用程序的较新版本可能提供有用的功能。
## 另外,请注意,反向移植的软件将不会收到任何评论
## 或来自 Ubuntu 安全团队的更新。
deb http://ca.archive.ubuntu.com/ubuntu/ bionic-backports 主要受限宇宙多元宇宙
# deb-src http://ca.archive.ubuntu.com/ubuntu/ bionic-backports 主要受限宇宙多元宇宙

## 取消注释以下两行以添加来自 Canonical 的软件
##‘合作伙伴’存储库。
## 该软件不是 Ubuntu 的一部分,而是由 Canonical 和
## 各自的供应商为 Ubuntu 用户提供服务。
# deb http://archive.canonical.com/ubuntu bionic 合作伙伴
# deb-src http://archive.canonical.com/ubuntu bionic 合作伙伴

deb http://security.ubuntu.com/ubuntu bionic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu bionic-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
# deb-src http://security.ubuntu.com/ubuntu bionic-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse

解决方案立即出现 - apt-get 再次工作,Python 版本正确,并且我的替代方案仍然可用于 venvs。

我在这里学到的最后一课是,当为开发/测试向系统添加其他版本的 Python 时,使用虚拟环境就更加重要了。在 venv 都使用相同基本版本的 Python 的系统中,这不是问题,但是当您想要使用不同的版本时,您需要确保不要添加“便利”链接,以便 python3 使用您的新版本。

相关内容