'/usr/bin/env python' 默认为 python3

roe*_*and 23 python command-line bash

我用apt-get安装了python2.7和pyhton3.5。
在我的 .bashrc 中,我必须alias python=python3将 python3 设为默认值。如果我直接运行 python,这有效,但它似乎不适用于 /usr/bin/env。

在这种情况下如何强制使用 python3?

$ python --version
Python 3.5.2
$ /usr/bin/env python --version
Python 2.7.12
Run Code Online (Sandbox Code Playgroud)

hee*_*ayl 19

那是因为envpython在您的中搜索PATH,而不是在任何 shell 内置、别名或函数中搜索。正如您定义pythonpython3别名一样,env不会找到它,它将搜索PATH并解析python/usr/bin/python(即python2)。

您可以检查可执行文件的所有可用位置python,在bash,请执行以下操作:

type -a python
Run Code Online (Sandbox Code Playgroud)

如果您想按照定义在 shebang 中使用别名,那您env就不走运了,shebang 需要是解释器可执行文件的完整路径python,当您使用/usr/bin/env python. 要python3使用 shebang解释脚本:

#!/usr/bin/env python3
Run Code Online (Sandbox Code Playgroud)

  • @r03 不要那样做,而是查看 `virtualenv`。 (3认同)
  • 谢谢。我现在让它像这样工作:'ln -s /usr/bin/python3 ~/bin/python'。~/bin 是 PATH 中的第一个。 (2认同)

deW*_*ker 11

到了 2020 年,事情发生了变化:

来自Focal Fossa发行说明

默认Python3

在 20.04 LTS 中,基础系统中包含的 python 是 Python 3.8。Python 2.7 已移至 Universe,默认情况下不包含在任何新安装中。

Ubuntu 中需要 Python 2.7 的其余软件包已更新为使用 /usr/bin/python2 作为解释器,并且 /usr/bin/python 在任何新安装中默认不存在。等等,等等

不幸的是,据我所知,Ubuntu 20.04LTS 发行版中的这一更改可能没有得到应有的效果。某些应用程序显然不支持此更改,并且如果没有一些帮助就无法工作。

如果您需要Python2,除了安装它并忍受混乱之外,您别无选择。如果您不需要它,至少有两个系统范围的解决方案可以让您的生活更轻松:

1. 安装python-is-python3

$ sudo apt-get install python-is-python3
Run Code Online (Sandbox Code Playgroud)

2. 申请update-alternatives

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
update-alternatives: using /usr/bin/python3 to provide /usr/bin/python (python) in auto mode
Run Code Online (Sandbox Code Playgroud)