为什么 Python 2.7 仍然是 Ubuntu 中的默认 Python 版本?

ラビナ*_*ンダン 46 python release-management

根据 Python 的官方文档,Python2.7 的支持将在不久的将来结束。

弃用:Python 2.7 的生命周期将于 2020 年 1 月 1 日结束。请升级您的 Python,因为在该日期之后将不再维护 Python 2.7。pip 的未来版本将不再支持 Python 2.7。有关 pip 中 Python 2 支持的更多详细信息,请访问https://pip.pypa.io/en/latest/development/release-process/#python-2-support

为什么 Ubuntu 在即将推出的版本中不使用 Python3 作为默认设置?

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="19.04 (Disco Dingo)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.04"
VERSION_ID="19.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=disco
UBUNTU_CODENAME=disco
Run Code Online (Sandbox Code Playgroud)
$ python
Python 2.7.16 (default, Apr  6 2019, 01:42:57) 
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Run Code Online (Sandbox Code Playgroud)

Kul*_*lfy 50

根据Bionic Beaver发行说明

默认情况下不再安装 Python 2。Python 3 已更新至 3.6。这是最后一个在 main 中包含 Python 2 的 LTS 版本。

而且上面的说法是正确的。默认情况下,Python 2 未在 18.04 和之后发布的版本中安装。Ubuntu 已经将几乎所有项目从 Python 2 迁移到 Python 3。例如,根据Disco Dingo 的发行说明

Samba 已更新到 4.10.x 版,这里的重大变化之一是对python3 的支持。在Disco中,samba及其依赖现在都是python3,tdb除外。tdb 仍然构建了一个 python2 包,即 python-tdb,但所有其他包,包括 samba 本身,都只是 python3。

此外,即使Ubuntu的18.04发布之前,Ubuntu的/规范开始要求开发人员能够迁移到Python 3,因为几近结束。来自Python - Ubuntu Wiki

所有 Ubuntu/Canonical 驱动的开发现在都应该以 Python 3 为目标,所有新代码都应该是 Python 3。如果你因为你的依赖堆栈而无法做到这一点,让我们谈谈。

似乎在您的系统上,Python 2 是有意安装的,或者可能是其开发人员尚未迁移到 Python 3 的其他某个软件包的依赖项。您可以通过运行来检查已安装的依赖于 Python 2 的软件包

apt rdepends python --installed
Run Code Online (Sandbox Code Playgroud)

python运行时调用 Python 2 的原因在于PEP 394历史要点之一——类 Unix 系统上的“python”命令

python命令应始终调用Python 2(以防止在 Python 3 上运行 Python 2 代码时出现难以诊断的错误)。

在较新的版本(例如 20.04)上,Ubuntu 提供了两个软件包:

python-is-python2/focal,focal 2.7.17-4 all
  symlinks /usr/bin/python to the DEPRECATED python2

python-is-python3/focal,focal 3.8.2-4 all
  symlinks /usr/bin/python to python3
Run Code Online (Sandbox Code Playgroud)

顾名思义,较早的将进行python调用python2,稍后将调用python3. 如果您没有依赖于 Python 2 的应用程序,您可以安装python-is-python3makepython来调用python3. 或者,您也可以编辑脚本的shebang,/usr/bin/python3使脚本直接python3用作解释器。

  • 为了澄清最后一点,Python 3 不向后兼容 Python 2。这与 Python 2 比 Python 3 拥有更多库支持这一事实相结合,意味着大量开发人员仍然直接依赖 Python 2。 Python 3 已经推出一段时间了,但实际上,正是这些库才是 Python 2 仍然被如此广泛使用的原因,即使它甚至不应该再受支持(如果我没记错的话,官方支持结束于2018)。编辑:官方支持将于 2020 年结束。 (14认同)
  • _"...事实上,Python 2 比 Python 3 拥有更多的库支持......"_ - 你有这方面的资源吗?我很少再遇到不支持 Python 3 的库,事实上有些库正在放弃对 Python 2 的支持!(例如,流行的 Python Web 框架 Django,[尚未支持三个版本的 Python 2](https://docs.djangoproject.com/en/2.2/faq/install/#faq-python-version-support ).) 五年前你的陈述是有道理的,但今天我认为你不能在没有统计数据支持的情况下做出如此全面的概括。 (13认同)
  • @searchengine27 我不认为图书馆支持因素会影响它。向后兼容性问题是世界上充斥着以`#!/usr/bin/python` 或等价物开头的随机脚本,如果`python` 变成`python3`,这将会中断,而依赖于Python 3 的随机脚本则是更有可能以 `#!/usr/bin/python3` 开头。 (8认同)
  • 补充一点:Python 软件基金会将在 2020 年停止维护 Python 2 的事实*并不意味着*Canonical 将在 2020 年停止维护 Python 2。事实上,使用 Linux *发行版*的*重点*来自一个信誉良好的供应商是,分发中的*所有*包(对于 Debian/Ubuntu,这意味着“主”存储库)将在发行版的整个生命周期内得到维护,*不管*原始上游包的支持状态如何。换句话说,只要 Ubuntu 19.04 还在,Ubuntu 19.04 中的 Python 2 包就会被维护。 (5认同)
  • @searchengine27 很久以前,有人制作了一个“Python3 耻辱墙”网站,其中列出了最常见的依赖项及其 Python3 状态(当时非常糟糕)。然而,它已被更改为 [Python 3 Wall of Superpowers](https://python3wos.appspot.com/) 已有数年之久,因为几乎所有常见的依赖项都已迁移,而少数未迁移的依赖项无论如何都已死(该网站自 2018 年 4 月以来一直没有更新,因为现在基本上所有内容都支持 Python3)。 (2认同)