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

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

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

答案1

根据Bionic Beaver 发行说明

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

上述说法是正确的。18.04 及之后发布的版本中,Python 2 并未默认安装。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/Canonical 就开始要求开发人员迁移到 Python 3,因为尽头快到了。 从Python - Ubuntu 维基百科

所有 Ubuntu/Canonical 驱动的开发现在都应该以 Python 3 为目标,并且所有新代码都应该仅限于 Python 3。如果您由于依赖堆栈而无法执行此操作,请与我们联系。

看来你的系统有意安装了 Python 2,或者可能是作为其他软件包的依赖项,而这些软件包的开发人员尚未迁移到 Python 3。你可以运行以下命令来检查已安装的依赖于 Python 2 的软件包:

apt rdepends python --installed

运行时调用 Python 2 的原因python在于历史要点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

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

答案2

python3据我所知,只有 arch linux 做到了这一点:从默认命令调用python。尽管PEP 394推荐。

可以通过重新定义、和/usr/bin之间的链接来更改它。但要做好应对大量错误的准备,因为所有 python2 脚本都需要有明确的 shell bang:pythonpythonXpythonX.Y

#!/usr/bin/env python2

在旧脚本中很少使用的 shell bang。

答案3

我正在分享我的实时体验,

尽管我的机器上安装了 python3.6,但我的系统默认指向 python2.7

但是当我尝试下载 python3.6 的新软件包时,它使用默认的 python2.7 下载

所以我遇到了这个 pyenv,

我安装了 pyenv

安装后

 $ pyenv install --list
 $ pyenv global

指向默认系统(python2.7)

安装python3.6

$ pyenv install 3.6.9

从 python2.7 更改为 python3.6

$ pyenv global 3.6.9

假设你想安装与 python2.7 相关的包,然后更改 python 环境

$ pyenv global 2.7.0

相关内容