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

评论

只是警告:请勿尝试将/ usr / bin / python符号链接更改为指向python3而不是2.7。 Ubuntu仓库中的许多程序都要求/ usr / bin / python与python 2.x兼容。

啊,现在我明白了升级的含义了……实际上,Ubuntu开发人员正在致力于该工作:wiki.ubuntu.com/Python/3“ Ubuntu 14.04 LTS的发行目标是在桌面CD上仅包含Python 3图片。”

另一个要注意的是,任何来这里是因为他们尝试学习将Python 3设置为默认值的人,都可以在研究虚拟环境(例如virtualenv)或容器(例如LXC或Docker)时找到用途。

关于顶部的soulsource警告,请参阅PEP 394,该规范对共存的Python可执行文件的命名约定进行了标准化,并且Python程序员和程序包维护者必须(并且应该)依靠它们。

@wjandrea,是的,即使在虚拟环境中,python也应保留为python2的含义。我的意思是说,我的评论是一种拥有特定于应用程序的Python版本的方式,而不是尝试解决系统的Python。

#1 楼

一种简单的安全方法是使用别名。将其放入~/.bashrc~/.bash_aliases文件中:



 alias python=python3
 


将以上内容添加到文件后,运行source ~/.bashrcsource ~/.bash_aliases

例如:

 $ python --version
Python 2.7.6
$ python3 --version
Python 3.4.3
$ alias python=python3
$ python --version
Python 3.4.3
 


要避免使用别名,请使用内置命令command

 $ command python --version
Python 2.7.6
 


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

 $ \python --version 
Python 2.7.6
 


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

 $ unalias python
$ python --version
Python 2.7.6
 


评论


实际上,我想清除2.7并将其替换为3.3。似乎现在是个坏主意。

– Giri
13年7月17日在8:26

+1没有理由为了能够使用3.3而清除2.7。由于许多软件仍依赖于2.7;只要保持它徘徊。

– don.joey
13年7月17日在9:39

@begueradj别名与符号链接完全不同。

– RaduRădeanu
2014年6月3日7:41



请注意:这可能会破坏其他需要Python 2.7的脚本。

– kmiklas
18-10-29在18:46

调用sudo python时,使用别名python ='python3'似乎无效。在这种情况下,它将改为打开默认的python2.7。

– Mitchell van Zuylen
19年2月21日在11:00

#2 楼

[2016年6月]有关过渡的信息的推荐位置是Ubuntu Ubuntu官方页面。


来自Ubuntu Wiki:


对于两个Ubuntu和Debian,我们一直在制定项目目标,以使Python 3成为发行版中默认的首选Python版本。

这并不意味着什么:


/usr/bin/python将指向Python3。不会,这不会发生(除非PEP 394提倡否则,这在可预见的将来是令人怀疑的)。 /usr/bin/python/usr/bin/python2将指向Python 2.7,而/usr/bin/python3将指向受支持的最新Python 3版本。
Python 2将被从档案中删除。不,这不会发生。鉴于PEP 373承诺到2020年之前都将提供上游错误修复维护支持,因此我们预计Python 2.7将在Ubuntu中长期保持支持并可用。




不建议这样做由于其他软件包的依赖性而更改了符号链接,但是它们“有持续的项目目标,以使Python 3成为发行版中默认的首选Python版本”。


供CLI使用,例如@RaduRădeanu,我建议在用户的~/.bashrc.bash_aliases文件中放置一个别名(不同的文件(包括~/.bash_profile)至少加载一次,主要用于组织目的,但可能因平台而异)。 Python虚拟环境也可以正常工作。

别名示例:

alias python=python3




alias python='/usr/bin/python3'

< br脚本仍应使用类似#!/usr/bin/env python3之类的字符进行交叉兼容。

使用env可以与虚拟环境混合使用。

注意(由于@wjandrea):别名是bash运行时的一部分,而不是用户环境。因此,shebang无法使用它们(#!)。如果您更喜欢别名python = python3,则可以通过调用类似program.py这样的别名解释器来执行一些没有shebang的python program.py。别名对于同时具有多个版本的python3(例如3.4和3.6)的系统也可能很有用。

评论


现在看来这已经过时了:他们计划在Xenial中删除python2,但后来没有这样做。

–橙色狗
16年6月20日在11:30

@OrangeDog,感谢您的更新。是的,我引用的Wiki页现在被标记为过时,因为在过去两年中,仅使用Python 3取得了更多进展。跟随这一进展的新页面是Ubuntu Ubuntu官方页面。

–凯文
16年6月20日在13:27

关于Xenial的计划,“最新”页面也已过时。

–橙色狗
16年6月20日在13:42

我不会说它“已过时”,而不会说“它最近未更新”。似乎仍然是关于此事的当前位置。但是,在这里的评论中,我将不胜感激任何人最近发现的任何其他最新消息。在转换完成之前,向我的答案中添加更多有关为什么不将其仅更改为python的信息并没有真正的意义。即使这样,它也可能只是一个问题。

–凯文
16年6月20日在13:51

别名是Bash内部的,不是环境的一部分,因此您仍然需要在shebang中使用python3,而不是python。

– wjandrea
18-09-28在22:51

#3 楼

在Ubuntu 20.04+上,您可以执行

sudo apt install python-is-python3


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

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


评论


我想知道为什么这不影响pip,或者为什么甚至没有相应的软件包pip-is-pip3? 🤔

–约翰·J·卡米利里(John J. Camilleri)
6月17日14:06

在Ubuntu 20.10+上apt install python3-pip将同时安装pip和pip3命令,这两个命令都是Python 3版本。

–鲍里斯(Boris)
7月20日在16:07



如果您的软件包仍然需要python2,则不会感到意外,因为它们将被卸载。

–解锁
12月23日9:34

#4 楼

更新:据我所知,这是错误的方法,因为Python2和Python3不可互换。
您可以尝试使用命令行工具update-alternatives
$ sudo update-alternatives --config python

如果出现错误“没有其他选择” for python”,然后使用以下命令自行设置替代:
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

相应地将路径/usr/bin/python3更改为所需的python版本。

评论


python2和python3不是替代品。为此,请勿使用更新替代方法。

–jobin
2014年6月2日在18:37

他们为什么不呢?你们其中一位可以解释为什么update-alternatives不适合python吗?是因为legacy.python.org/dev/peps/pep-0394吗?

–德米特里·格里戈里耶夫(Dmitry Grigoryev)
16-2-19在14:28



替代方案是相同功能的不同实现。 python2和python3不提供相同的功能。

– Ely
16年12月13日在19:01

如果您手动(通过ppa或其他方式)安装了其他版本的python3,则可以执行类似的操作。 sudo update-alternatives --install / usr / bin / python3 python3 /usr/bin/python3.7 2

– David Baucum
18年8月20日在14:45



这是我需要为没有python的18.04.2 vm执行的操作。谢谢

–黑暗之星1
19-2-20在12:05



#5 楼

Ubuntu和其他Linux发行版在许多应用程序和命令上仍然很大程度上依赖于Python 2.7。如果将“ python”的默认引用更改为Python 3.x,那么许多Python函数将开始引发断言错误。

例如,在Ubuntu上,不再使用'pip'除非您直接编辑该文件并将shebang更改为引用'#!/ usr / bin / env python2.7',否则运行正常。在Red Hat,Fedora和CentOS等RHEL(红帽企业Linux)版本中,“ Yum”命令还取决于Python 2.7。

我的意思是,这会导致大量的代码开始引发断言错误,以便您可以在终端中键入“ python”以引用Python3.x。

在终端中使用“ python3”命令会更好,在您的Python 3.x文件中设置shebang'#!/ usr / bin / env python3'。

#6 楼



cd ~
gedit .bash_aliases


然后写

alias python=python3




alias python='/usr/bin/python3'

/>
保存文件,关闭终端,然后再次打开。链接

#7 楼

我发现仅删除/ usr / bin / python和/ usr / bin / pip非常有帮助。这迫使所有程序都依赖“ python2”和“ python3”命令。

尽管某些可选的和过时的软件包依赖#!/usr/bin/python来工作,但我宁愿向这些程序提交补丁,而不是继续犯下怪异的,有时难以调试的错误。

#8 楼

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


(前提是您拥有对/ usr / local / bin的写许可权)
同样


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


那么您只需键入py (并在#!行中使用py)作为您选择的python。

评论


使用符号链接会更简单吗?须藤ln -s / usr / bin / python3 / usr / local / bin / py

– wjandrea
18/12/4在1:31

当您可以给-i作为py的选项时,为什么还要打扰pyi?

– wjandrea
1月1日19:26