我使用 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 内置命令、别名或函数中搜索。由于您已将 定义为别名,因此不会找到它,它会搜索并解析为(即)。python
PATH
python
python3
env
PATH
python
/usr/bin/python
python2
您可以检查可执行文件的所有可用位置python
,在中bash
执行以下操作:
type -a python
如果你想在 shebang 中使用别名,那你就没那么幸运了,因为根据定义,shebang 需要是解释器可执行文件的完整路径,当你使用时env
应该解析它。要使用 shebang解释脚本:python
/usr/bin/env python
python3
#!/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 访问权限。
其他解决方案可能会影响操作系统的稳定性