如何让'python'程序命令执行Python3?

python 程序命令执行Python2。 Python3可以使用 python3 命令。 如何使用Python3执行 python 命令?

您可以安装系统范围的软件包:

$ sudo apt install python-is-python3

请参阅注意事项:Ubuntu20.04中的python-is-python3包-它是什么,它实际上做了什么?

一个简单安全的方法是使用别名。 把这个放到 ~/.bashrc~/.bash_aliases 档案:

alias python=python3

在文件中添加上述内容后,运行 source ~/.bashrcsource ~/.bash_aliases.

例如:

$ python --versionPython 2.7.6$ python3 --versionPython 3.4.3$ alias python=python3$ python --versionPython 3.4.3

要绕过别名,请使用 command 内置命令:

$ command python --versionPython 2.7.6

规避别名的另一种方法是使用 \ 命令之前。

$ \python --version Python 2.7.6

要在当前shell中禁用别名,请使用 unalias 内置命令:

$ unalias python$ python --versionPython 2.7.6

Ubuntu20.04+ 只需安装 python-is-python3 包裹:

sudo apt install python-is-python3

最重要的是,您可以防止Python2在将来作为某些东西的依赖项安装 apt-mark hold:

sudo apt-mark hold python2 python2-minimal python2.7 python2.7-minimal libpython2-stdlib libpython2.7-minimal libpython2.7-stdlib 

[2016年6月] 关于过渡的信息推荐的地方是官方的 Ubuntu Python的 页。


Ubuntu维基:

对于Ubuntu和Debian,我们有 进行中 工程项目 目标 为了使Python3成为发行版中的默认首选Python版本。

这是什么 不会 平均:

  • /usr/bin/python 将指向Python3。 不,这不会发生的 (除非 佩普394 (否则,这在可预见的未来是值得怀疑的)。 /usr/bin/python/usr/bin/python2 将指向Python2.7和 /usr/bin/python3 将指向最新支持的Python3版本。

  • Python2将从存档中删除。 不,这不会发生的. 我们预计Python2.7将在Ubuntu中保持支持和可用很长一段时间,因为 打气373 承诺上游bug修复维护支持,直到2020年.

不建议更改符号链接,因为其他包依赖关系,但他们"有正在进行的项目目标,使Python3成为发行版中的默认,首选Python版本"。


对于CLI使用,如 @拉杜Radeanu,我会建议把一个别名在用户的 ~/.bashrc, .bash_aliases 文件(不同的文件,包括 ~/.bash_profile,至少加载一次,主要用于组织目的,但可能因平台而异)。 巨蟒 虚拟环境 也工作得很好。

别名示例:

alias python=python3

alias python='/usr/bin/python3'

脚本仍然应该使用类似的东西 #!/usr/bin/env python3 供交叉兼容性。

使用 env 适合与虚拟环境混合使用。

注意(感谢@wjandrea):别名是bash运行时的一部分,而不是用户环境。 因此,他们是不可用的舍邦(#!). 如果你更喜欢别名python=python3,那么一些 program.py 没有shebang可以通过调用别名解释器来执行,如下所示 python program.py. 别名也可能对使用多个版本的python3(如3.4和3.6)的系统有用。

更新:这是错误的方式,我已经学会了,因为Python2和Python3是不可互换的。

你可以试试命令行工具 update-alternatives.

$ sudo update-alternatives --config python

如果您收到错误"no alternatives for python"然后使用以下命令自己设置一个替代:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

更改路径 /usr/bin/python3 相应地到您想要的python版本。

Ubuntu和其他Linux发行版仍然在很大程度上依赖于Python2.7来实现许多应用程序和命令。 如果将"python"的默认引用更改为Python3。x,那么一些Python函数就会开始抛出断言错误。

例如,在Ubuntu上,'pip'for one将不再正确运行,除非您直接编辑文件并将shebang更改为引用'#!/usr/bin/env python2.7'。 在RHEL(Red Hat Enterprise Linux)口味如Red Hat,Fedora和CentOS上,'Yum'命令也依赖于Python2.7。

我的观点是,你会导致大量的代码开始抛出断言错误,这样你就可以在终端中键入'python'来引用Python3。x.

在终端和shebang#中使用'python3'命令会更好!/usr/bin/env python3'在你的Python3。x文件。

cd ~gedit .bash_aliases

然后写要么

alias python=python3

alias python='/usr/bin/python3'

保存文件,关闭终端并重新打开。
连结

我发现简单地删除/usr/bin/python和/usr/bin/pip非常有帮助。 这迫使所有程序依赖于"python2"和"python3"命令。

虽然一些可选的和过时的软件包依赖于 #!/usr/bin/python 为了工作,我宁愿向这些程序提交补丁,而不是继续犯奇怪的,有时难以调试的错误。

cat > /usr/local/bin/py << 'EOF'#!/bin/dashpython3 "$@"EOF

(前提是你有/usr/local/bin的写入权限)同样

cat > /usr/local/bin/pyi << 'EOF'#!/bin/dashpython3 -i "$@"EOF

然后你只输入py(并在#中使用py! 行)为您选择的python。

只是一个警告:不要尝试将/usr/bin/python符号链接更改为指向python3而不是2.7。 Ubuntu repos中提供的许多程序都需要/usr/bin/python与python2兼容。x.

另外,任何人来这里是因为他们试图学习如何使Python3成为他们的默认值,可能会发现在研究虚拟环境(例如virtualenv)或容器(例如LXC或Docker)时使用。

@wjandrea,是的,即使在虚拟环境中,'python’也应该保持为python2的意思。 我的意思是我的评论是一种拥有特定于应用程序的Python版本的方式,而不是试图围绕系统的Python工作。

现在我明白你的意思了。… 实际上,Ubuntu开发人员正在努力:Python/3 - Ubuntu Wiki “Ubuntu14.04LTS的发布目标是在桌面CD映像上只有Python3。”

关于soulsource在顶部的警告,请参阅[PEP394](PEP 394 – The “python” Command on Unix-Like Systems | peps.python.org)规范了共存的Python可执行文件的命名约定,以及Python程序员和包维护者所依赖的(并且应该)。

'sudo apt install python-is-python3`(适用于Ubuntu20.04+)

@soulsource,是的,我知道。 这就是为什么我问是否有"升级"选项可用。

我认为Radu Ròdeanu的答案已经相当接近最佳解决方案。 它只适用于一个用户,并且只适用于直接运行python键入python命令,而不影响带有#的程序!/usr/bin/python shebang。

@soulsource这就是我正在寻找的! :)谢谢!

@Kevin我刚刚尝试使用virtualenv,但只要我从终端打开Gedit,我就得到了一堆错误,导致它的插件似乎需要Python2。 类似的问题可能发生在任何其他软件,依赖于命令’python’是Python2。