我已经在我的 Mac 上安装了 Python 3.2。我跑后/Applications/Python 3.2/Update Shell Profile.command ,当我输入 时,令人困惑Python -V 在终端它说 Python 2.6.1 .
如何更改默认 Python 版本?
最佳答案
(无论您使用的是 Mac、Linux 还是 Windows:)
这对于向后兼容性是可取的(即使从技术上讲,python 甚至不保证次要版本之间的向后兼容性)。
Python3 确实打破了向后兼容性,并且程序调用了 'python
' 期待 python2。您有许多程序和脚本(您甚至都不知道)它们期望 python
=python2,改变它会破坏那些程序和脚本。这是编写和打包 python 的人做出的一个经过深思熟虑的决定。
您正在寻找的答案是:你不应该改变这个 .
如果你对如何启动最新版本的python感到困惑,在大多数平台上都是这样的python3
留下您的 python2
安装完好(由于上述兼容性原因);因此你可以用 python3
启动 python3命令。
shell 别名:
但是,您可以在 shell 中创建自定义别名。您这样做的方式取决于 shell ,但也许您可以这样做 alias py=python3
, 并将其放入您的 shell 启动文件中。这仅适用于您的本地计算机(应该如此),并且与仅输入它相比有些不必要(除非您不断调用该命令)。
困惑的用户不应该尝试创建别名或虚拟环境或类似的东西,使 python
执行 python3
;这是糟糕的形式。
不同的 3.* 版本或 2.* 版本:
在极不可能的情况下,如果有人用两个 python3 版本来解决这个问题,例如3.1 与 3.2,并且您对以某种方式安装了两个版本的 python 感到困惑,这可能是因为您进行了手动和/或手动安装。您可以使用操作系统的标准包/程序安装/卸载/管理工具来帮助跟踪问题,并且也许(除非您正在做的开发工作令人惊讶地受到次要版本之间少数向后不兼容的更改的影响)删除旧版本(或者做 make uninstall
如果你手动安装)。如果您需要两个版本,请重新配置您的 $PATH
变量所以你想要的“默认”版本在前面;或者,如果您使用的是大多数 Linux 发行版,则您要查找的命令是 sudo update-alternatives
.确保您运行的任何需要访问旧版本的程序都可以被它们的调用环境或 shell 正确调用(通过在该环境中设置 var PATH
)。
旁注:详细说明 PATH:选择程序的常用方法是通过 PATH
( echo $PATH
在 Linux 和 Mac 上)环境变量。您始终可以使用完整路径运行程序,例如/usr/bin/🔳 some args
, 或 cd /usr/bin
然后 ./🔳 some args
(例如,将空白替换为我上面提到的“echo”程序),否则输入 🔳 some args
没有PATH
就没有意义env 变量声明了我们隐式可以从中搜索然后执行文件的目录(如果 /usr/bin
不在 PATH
中,那么它会说 🔳: command not found
)。第一个目录中的第一个匹配命令是执行的命令(Linux 和 Mac 上的 which
命令会告诉您这是哪个子路径)。通常它是(例如在 Linux 上,但在 Mac 上类似)类似于 /usr/bin/python
这是指向某处最终版本的其他符号链接(symbolic link)的符号链接(symbolic link),例如:
% 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 模块或 sys.path
环境中使用 PYTHONPATH
修改子进程的路径在父进程上设置的变量,或指定完整路径...但由于路径是由子进程继承的,所以这不太可能是一个问题。)
关于python - 如何更改默认 Python 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5846167/