为什么 Python 3 不是默认的 Python 二进制文件?

为什么 Python 3 不是默认的 Python 二进制文件?

我在终端窗口中输入python。我得到的是 Python 2.7,而不是 Python 3.5。根据文档,Python 3.5 应该是预装的。

答案1

我不知道您正在阅读什么“文档”,也不知道它们说了什么,但这只是指向 python 默认版本的符号链接,在本例中为 2.7,这是在终端上/usr/bin/python输入的结果。这是pythonPEP 394定义了

  • 暂且,所有发行版都应确保引用的python是同一目标python2

type python并将file /usr/bin/python证实这一点。

这种安排的原因除了惯例之外,是因为源包Xenial 中的 python-defaults 是版本 2.7.11,因此 python 符号链接指向该版本。

要使用 Python 3,您必须明确输入python3命令行,如果您需要特定版本,建议您这样做,对于 Python 2,也可以输入python2。Ubuntu 在所有当前版本中默认包含 Python 2 和 3 版本。

计划将所有内容迁移到 Python 3并将其标记为默认。

答案2

要获取 Python 3.5 REPL 或运行兼容的脚本,请输入python3。这是为了保持与所有旧版 Python 2.x 的兼容性(始终与 保持链接,并将继续保持链接python)。

例如,如果您为其python设置了一个文件(在 中), dash 可以找到它,以打开终端并启动 REPL。python 没有默认的 GUI REPL 环境,正常的界面预期是用户将转到终端。.desktop~/.local/share/applications/

关于 python 3.5 成为默认语言的讨论是指维护人员将所有系统脚本从 python 2.x 移植到 python 3.x,而不是 python 3 在所有情况下都会取代 python 2。

答案3

您假设默认 Python 应以 的形式提供python。但这种假设是错误的。

不幸的是,python在 shellTab扩展过程中,过时的 Python 2 ( ) 会先出现,而在同时具有这两种语言的系统上,当前和默认的 Python 3 ( python3) 会先出现。命名本身当然也无助于找到默认语言,但这背后是有原因的。

在预装了 Python 3 而根本没有 Python 2 的系统上,将只有python3而没有python

为 Python 3 编写的代码应该始终寻找名为 的解释器python3。为 Python 2 编写的代码历来会寻找python

这样,就不会出现任何额外的和不必要的损坏,无论是新脚本还是旧脚本,python都不会因任何不确定性而导致损坏。

也许在某个时间点,可能是几十年后,几乎没有人记得 Python 2,那时python可能会开始提到python3。这纯粹是为了方便,可以也不应该过早地做,如果有的话!不必着急,因为会产生以下影响:

“当前旧”系统不会知道python2,只会知道python,因此让 Python 2 代码寻找 是完全合理的python。这就是为什么python“只要 Python 2 代码存在”就应该引用 Python 2 的原因。

如果有意义的话,为 Python 2 编写的新代码可以完美地查找。如果它打算仅在支持 Python 3 且经过良好维护的系统上运行(可能会提供此类链接),python它也可能会查找。python2

使用 Python 2 代码的好处是,一旦开始引用,python2它就不需要额外的接触,这可能永远不会发生,或者一旦消失,这可能会发生也可能不会发生。(如果 Python 2 代码在假设的 Python 4 及其解释器流行之后消亡,那么这可能会实现。——因为让它指向其中一个或两个都会造成混淆。)pythonpython3pythonpython4python3python4

注意:Arch Linux 发行版未遵循建议,并python指向 Python 3。

答案4

Python 3.x 应该可以与 16.04 兼容 - 事实上,它绝对可以兼容。我有 Ubuntu 14.04 和 Python 3.4.3 - 你要做的就是输入python3,它会告诉你你正在运行的是什么版本。

相关内容