![为什么 Python 2.7 仍然是 Ubuntu 中的默认 Python 版本?](https://linux22.com/image/1167523/%E4%B8%BA%E4%BB%80%E4%B9%88%20Python%202.7%20%E4%BB%8D%E7%84%B6%E6%98%AF%20Ubuntu%20%E4%B8%AD%E7%9A%84%E9%BB%98%E8%AE%A4%20Python%20%E7%89%88%E6%9C%AC%EF%BC%9F.png)
根据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
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-python3
makepython
调用python3
。或者,您也可以编辑脚本的 shebang 以/usr/bin/python3
使脚本直接用作python3
解释器。
答案2
python3
据我所知,只有 arch linux 做到了这一点:从默认命令调用python
。尽管PEP 394推荐。
可以通过重新定义、和/usr/bin
之间的链接来更改它。但要做好应对大量错误的准备,因为所有 python2 脚本都需要有明确的 shell bang:python
pythonX
pythonX.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