该 python
程序命令执行Python2。 Python3可以使用 python3
命令。 如何使用Python3执行 python
命令?
您可以安装系统范围的软件包:
$ sudo apt install python-is-python3
请参阅注意事项:Ubuntu20.04中的python-is-python3包-它是什么,它实际上做了什么?
一个简单安全的方法是使用别名。 把这个放到 ~/.bashrc
或 ~/.bash_aliases
档案:
alias python=python3
在文件中添加上述内容后,运行 source ~/.bashrc
或 source ~/.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版本。
这是什么 不会 平均:
不建议更改符号链接,因为其他包依赖关系,但他们"有正在进行的项目目标,使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工作。
关于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。