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


42

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


1
如果使用以下命令设置虚拟环境:“ python3 -m venv my-venv”,则可以从任何终端通过调用“ source ... / my-env / bin / activate”激活该虚拟环境,然后python 3.5该终端的默认设置。您可以通过调用“ python -V”来检查当前的默认版本。
克雷格·希克斯

虽然您的回答很有帮助,但我问为什么。没办法。而且,这是一个大辩论。这里。为什么默认情况下应使用旧版本而不是当前版本。
givonz

1
您对我的“评论”完全正确!这就是为什么我写评论而不是回答的原因。
克雷格·希克斯

Answers:


56

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

  • 目前,所有发行版都应确保与python指向相同的目标python2

type pythonfile /usr/bin/python确认这一点。

除了约定之外,这种安排的原因是Xenial中的源软件包python-defaults是版本2.7.11,因此python符号链接指向此版本。

要使用python 3,您必须明确并python3在命令行中键入,如果需要特定版本,建议您在命令行中键入,这也可以使用python 2来完成,键入python2。在所有当前版本中,Ubuntu默认都包括python 2和3版本。

计划迁移一切到Python 3和标记为默认。


这可能会破坏rhythmbox-zeitgeist插件,该插件依赖zeitgeiigeist-python3但找不到。
库尔希德·阿拉姆

2
这是 OP所指的文档
SaidbakR

10

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

破折号可以找到python是否.desktop为它设置了文件(在中~/.local/share/applications/),以打开终端并启动REPL。python没有默认的GUI REPL环境,正常的界面期望是用户会去到终端。

python 3.5是默认的说法是维护者将所有系统脚本从python 2.x移植到python 3.x,而不是在所有情况下python 3都会取代python 2。


所以,我猜正确的问题是,如何将python3添加到我的路径中,以便它自动执行?
givonz '16

您的意思是,如何让python脚本像已编译的程序一样执行?
安德鲁·基奇

知道了谢谢。只需在命令提示符下键入python3即可。
givonz '16

2
AIUI从长远来看如何处理/ usr / bin / python仍然是一个悬而未决的问题。python2脚本的最佳实践是显式使用python2。
彼得·格林

1
而不是在脚本中使用 #!/usr/bin/python3(或#!/usr/bin/python2),#!/usr/bin/env python3如果您希望它具有远程可移植性,则最好使用它(仅适用于python)。在大多数情况下,这只是文档,因为在许多情况下,$ python3 your_pyprogram.py无论如何都将调用它。
迈克尔,

4

您假设默认的Python应该可作为使用python。这个假设是错误的。

在“预加载” Python 3的系统上,根本没有Python 2的系统上,只有python3且没有python

为Python 3编写的代码应始终寻找名为的解释器python3。从历史上看,为Python 2编写的代码会寻找python

可能会有一个时间点,可能是从现在开始的几十年,几乎没有人记得Python 2,那时python可能会开始使用python3。这纯粹是为了方便起见,如果有的话,也可以而且不应该为时过早!不必急,因为有以下影响:

“当前的旧”系统python2仅是一无所知python,因此让Python 2代码一直在寻找是很有意义的python。这就是为什么python只要“ Python 2代码存在”就应引用Python 2 的原因。

为Python 2编写的新代码(如果有道理)可以完美地寻找pythonpython2如果它仅打算在具有Python 3意识且经过精心整理的系统(应提供此类链接)上运行,它也可能会寻找。

使用Python 2代码的好处python2是,一旦python开始引用,它就python3永远不需要发生,或者一旦python消失,就可能发生或不发生,它不需要额外的操作。(如果在假设的解释器Python 4流行之后,Python 2代码消失了,那可能会成真。– python4因为让它指向一个python3python4两个都将引起混淆。)


2

Python的2.x,3.x版本均可用。如果您按指向python 2.x的方式调用python,它将加载python 2.x

下图将为您提供帮助。

在此处输入图片说明


1
您如何键入相同的命令并获得2个不同的结果?
givonz '16

3
从第二次调用输出不同的python是使用<tab>查询autocompleter,然后的可能的排列输出python*,并返回你到一个新的提示。
安德鲁·基希

@givonz,嗯,我用了TAB键。它不输出。可能是二进制模式。
rɑːdʒɑ

否决票是什么?
rɑːdʒɑ

1
我没有投票,但是我认为答案应该解释为什么两个前两个输出是不同的,以及它们的作用是什么 apt-cache,特别是对于Ubuntu初学者。
AL

2

Python 3.x应该可以在16.04上使用-实际上,它肯定可以使用。我有Ubuntu 14.04,我有Python 3.4.3-测试它所要做的就是输入python3,它应该告诉您正在运行的版本。


2
好吧,我不会使用OS计算机科学来打电话。严格来说,Ubuntu是基于Linux的操作系统,而不是基于Unix的操作系统。
magu_

除了一些命令提示符之外,我还没有了解diff bet linux&unix,但它们的措辞却很接近。尽管gui比我在solaris中看到的要先进得多。
givonz '16

1
-1不能解决为什么这样的问题。
David Foerster
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.