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


32

根据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
$ 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.

2
您可以安装python3.7软件包。问题是,在ubuntu \ linux mint版本中,有时仍然是旧软件,因此您必须手动安装更新的软件包。

8
@enigma这个问题不是重复的,因为python缺省情况下已经在python上安装了python3,因此他同时安装了python和python3。
karel

Answers:


40

根据仿生海狸发行说明

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

以上说法是正确的。在18.04中默认未安装Python 2,此后发布了版本。Ubuntu已经将其几乎所有项目从Python 2迁移到了Python3。例如,根据Disco Dingo的发行说明

Samba已更新至版本4.10.x,其中的一大变化是对python3的支持。在Disco中,除了tdb之外,samba及其依赖项现在仅是python3。tdb仍构建python2软件包,即python-tdb,但所有其他软件包(包括samba本身)仅是python3。

而且,甚至在Ubuntu 18.04发行之前,Ubuntu / Canonical便开始要求开发人员迁移至Python 3,因为最终版本已经临近。从Python-Ubuntu Wiki

目前,所有由Ubuntu / Canonical驱动的开发都应以Python 3为目标,所有新代码都应仅为Python 3。如果由于您的依赖项堆栈而无法执行此操作,那么我们来谈谈。

看来您的系统上有意安装了Python 2,或者可能是开发人员尚未使用Python 3的其他软件包的依赖项。您可以通过运行以下命令检查依赖于Python 2的软件包,

apt rdepends python

python运行时调用Python 2的原因在于PEP 394历史点之一-Unix-like Systems上的“ python”命令

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


12
为了澄清最后一点,Python 3与Python 2不向后兼容。再加上Python 2比Python 3具有更多的库支持这一事实,意味着大量开发人员仍然直接依赖于Python 2。 Python 3已经问世了一段时间,但实际上正是库才是Python 2如此被广泛使用的原因,即使它甚至不再受支持(如果我没记错的话,官方支持也因此终止了) 2018)。编辑:官方支持在2020
。– searchengine27

8
“ ...事实是Python 2比Python 3具有更多的库支持...” -您是否有相关资料?我再也很少遇到不支持Python 3的库了,实际上,有些库正在放弃对Python 2的支持!(例如,流行的Python Web框架Django 在三个版本中均不支持Python2。)您的声明在5年前就说得通了,但是今天,我认为您不能在不使用统计数据进行支持的情况下进行广泛的概括。
marcelm

7
@ searchengine27我不认为图书馆的支持因素会影响它。向后兼容性值得关注的是,世界上充斥着这样开始的随机脚本#!/usr/bin/python或同等学历,如果这将打破python成了python3,而依赖于Python 3的随机脚本更容易下手#!/usr/bin/python3
James_pic

1
@ searchengine27很久以前,有人在“ Python3耻辱墙”网站上列出了最常见的依赖项及其python3状态(当时真是糟糕透顶)。但是已经有好几年了,因为几乎所有常见的依赖项都已迁移,并且少数不迁移的依赖项已经死亡,所以它已更改为Python 3 Superpowers Wall(该网站自2018年4月以来从未进行过更新,基本上所有内容是python3-able)。
Giacomo Alzetta

4
正如一个另外的事实:Python软件基金会将停止在2020年保持Python的2 ,并不意味着该规范将停止维护的Python 2在2020年事实上,整点使用的是Linux的发行,从一个有信誉的供应商是所有发行版中的软件包(对于Debian / Ubuntu而言,表示“主”存储库)将在发行版本的整个生命周期内维护,无论原始上游软件包的支持状态如何。换句话说,只要Ubuntu 19.04保持不变,Ubuntu 19.04中的Python 2软件包都将得到维护。
约尔格W¯¯米塔格

0

据我所知,只有arch linux做到了:python3从默认python命令调用。尽管有PEP 394建议。

它可以改变/usr/bin通过重新定义之间的联系pythonpythonXpythonX.Y。但请准备好应对许多错误,因为您所有的python2脚本都必须具有显式的外壳爆炸:

#!/usr/bin/env python2

在旧脚本中很少使用的外壳爆炸。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.