‘/usr/bin/env python’ 默认为 python3

‘/usr/bin/env python’ 默认为 python3

我使用 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

答案1

这是因为是在您的 中env搜索,而不是在任何 shell 内置命令、别名或函数中搜索。由于您已将 定义为别名,因此不会找到它,它会搜索并解析为(即)。pythonPATHpythonpython3envPATHpython/usr/bin/pythonpython2

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

type -a python

如果你想在 shebang 中使用别名,那你就没那么幸运了,因为根据定义,shebang 需要是解释器可执行文件的完整路径,当你使用时env应该解析它。要使用 shebang解释脚本:python/usr/bin/env pythonpython3

#!/usr/bin/env python3

答案2

现在是 2020 年,情况发生了变化:

来自局灶性窝发行说明

默认使用 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

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

答案3

考虑到调用 /usr/bin/env python 并期望使用 python 2 的脚本数量,将 python 实际设置为 python 3 可能不是一个好主意。

正如 Benny 在评论中所说,/usr/bin/env python3这是正确的解决方案。

答案4

在不干扰整个系统的情况下,在我看来,最好的方法是在你的使用账户中创建一个虚拟环境并激活它

/路径/到/你的/python3 -m pip create ~/.venv

源〜/ .venv / bin / activate

然后,你的默认 python 将是你用来创建 venv 的 python(在路径中等)

有了这个解决方案,您在安装新的库时也不会干扰系统,也不需要 root 访问权限。

其他解决方案可能会影响操作系统的稳定性

相关内容