如何更改默认 Python 版本?

新手上路,请多包涵

我已经在我的 Mac 中安装了 Python 3.2。在我运行 /Applications/Python 3.2/Update Shell Profile.command 之后,令人困惑的是,当我在终端中键入 Python -V 时,它会显示 Python 2.6.1

如何更改默认 Python 版本?

原文由 Zhu Shengqi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

[2021年更新]

(无论您使用的是 Mac、Linux 还是 Windows:)

如果您对如何启动最新版本的 python 感到困惑,在大多数平台上, python3 使您的 python2 安装完好无损 (由于上述兼容性原因) ;因此您可以使用 python3 命令启动 python3。

历史上…

命名约定通常是,大多数脚本会显式调用 python2 或 python3。发生这种情况是因为 _需要向后兼容_。

尽管从技术上讲,python 甚至不保证次要版本之间的向后兼容性,但 Python3 确实 打破了向后兼容性。当时,调用“ python ”的程序正在期待python2(这是当时的主要版本)。非常旧的系统可能具有期望 python =python2 的程序和脚本,并且更改它会破坏这些程序和脚本。

在编写此答案时,由于维护旧脚本的兼容性,OP 不应更改此内容。

大约在 2021 年…

如今,在 python2->python3 过渡多年后,大多数软件都明确提到了 python2 或 python3(至少在 Linux 上)。例如,他们可能会调用 #!/usr/bin/env python2#!/usr/bin/env python3例如,(python-is-python3-package) 释放了可设置为用户默认值的 python 命令,但它实际上取决于操作系统。

发行版应如何处理 python 命令的处方于 2011 年编写为 PEP 394——类 Unix 系统上的“python”命令。它最后一次更新是在 2019 年 6 月。

基本上如果你在写一个库,你应该指定你可以使用的python版本(2或3,或者在特定情况下更细粒度)。否则,作为最终用户,您应该随意重命名它以供您个人使用(尽管您的操作系统或发行版可能不会那么容易)。

外壳别名:

但是,您可以在 shell 中创建自定义别名。你这样做的方式取决于 shell,但也许你可以做 alias py=python3 ,并将它放在你的 shell 启动文件中。这仅适用于您的本地计算机(应该如此),并且与仅输入它相比有点不必要(除非您不断调用该命令)。

困惑的用户不应尝试创建使 python 执行 python3 的别名或虚拟环境或类似的东西;这是一种糟糕的形式。现在这是可以接受的,但 PEP 394 建议鼓励用户改用 virtualenv

不同的 3.* 版本或 2.* 版本:

在极不可能的情况下,如果有人使用两个 python3 版本(例如 3.1 和 3.2)来回答这个问题,并且您对自己安装了两个版本的 python 感到困惑,这可能是因为您已经完成了手动和/或手动安装。您可以使用您的操作系统的标准包/程序安装/卸载/管理工具来帮助跟踪事情,也许(除非您正在做的开发工作令人惊讶地受到次要版本之间的一些向后不兼容的更改的影响)删除旧版本(或者 make uninstall 如果您进行了手动安装)。如果您需要两个版本,请重新配置您的 $PATH 变量,以便您想要的“默认”版本在前面;或者,如果您使用的是大多数 Linux 发行版,您正在寻找的命令是 sudo update-alternatives 。确保您运行的任何需要访问旧版本的程序都可以被它们的调用环境或 shell 正确调用(通过在该环境中设置 var PATH )。

关于 $PATH

旁注:详细说明 PATH:选择程序的常用方法是通过 PATH (在 Linux 和 Mac 上为 — echo $PATH )环境变量。您始终可以使用完整路径运行程序,例如 /usr/bin/🔳 some argscd /usr/bin 然后 ./🔳 some args (用上面提到的示例替换空白) ,但否则键入 🔳 some args 没有 PATH 变量,它声明我们可以隐式搜索然后执行文件的目录(如果 /usr/bin 不是--- PATH ,那么它会说 🔳: command not found )。第一个目录中的第一个匹配命令是执行的命令(Linux 和 Mac 上的 which 命令会告诉您这是哪个子路径)。通常它是(例如在 Linux 上,但在 Mac 上类似)类似于 /usr/bin/python 的符号链接,它是指向最终版本的其他符号链接的符号链接,例如:

 % echo $PATH
/usr/sbin:/usr/local/bin:/usr/sbin:usr/local/bin:/usr/bin:/bin

% which python
/usr/bin/python
% which python2
/usr/bin/python2
% ls -l /usr/bin/python
lrwxrwxrwx 1 root root 7 Mar  4  2019 /usr/bin/python -> python2*
% ls -l /usr/bin/python2
lrwxrwxrwx 1 root root 9 Mar  4  2019 /usr/bin/python2 -> python2.7*
% ls -l /usr/bin/python2.7
-rwxr-xr-x 1 root root 3689352 Oct 10  2019 /usr/bin/python2.7*

% which python3
/usr/bin/python3
% ls -l /usr/bin/python3
lrwxrwxrwx 1 root root 9 Mar 26  2019 /usr/bin/python3 -> python3.7*
% ls -l /usr/bin/python3.7
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7*

% ls -l /usr/bin/python*
lrwxrwxrwx 1 root root       7 Mar  4  2019 /usr/bin/python -> python2*
lrwxrwxrwx 1 root root       9 Mar  4  2019 /usr/bin/python2 -> python2.7*
-rwxr-xr-x 1 root root 3689352 Oct 10  2019 /usr/bin/python2.7*
lrwxrwxrwx 1 root root       9 Mar 26  2019 /usr/bin/python3 -> python3.7*
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7*
lrwxrwxrwx 1 root root      33 Apr  2  2019 /usr/bin/python3.7-config -> x86_64-linux-gnu-python3.7-config*
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7m*
lrwxrwxrwx 1 root root      34 Apr  2  2019 /usr/bin/python3.7m-config -> x86_64-linux-gnu-python3.7m-config*
lrwxrwxrwx 1 root root      16 Mar 26  2019 /usr/bin/python3-config -> python3.7-config*
lrwxrwxrwx 1 root root      10 Mar 26  2019 /usr/bin/python3m -> python3.7m*
lrwxrwxrwx 1 root root      17 Mar 26  2019 /usr/bin/python3m-config -> python3.7m-config*

旁注2:(在极少数情况下,python程序调用带有 subprocess 模块的子程序,要指定要运行的程序,可以使用 sys.path 从sys 模块或 PYTHONPATH 在父级上设置的环境变量,或指定完整路径……但由于路径是由子进程继承的,这不太可能是一个问题。)

原文由 ninjagecko 发布,翻译遵循 CC BY-SA 4.0 许可协议

检查python 3的位置

$ which python3
/usr/local/bin/python3

在 bash_profile 中写入别名

vi ~/.bash_profile
alias python='/usr/local/bin/python3'

重新加载 bash_profile

 source ~/.bash_profile

确认 python 命令

$ python --version
Python 3.6.5

原文由 Ryosuke Hujisawa 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题