如何在OS X上将Python的默认版本设置为3.x?

485

我正在使用Mountain Lion操作系统,基本默认的Python版本是2.7。我下载了Python 3.3并希望将其设置为默认版本。

当前:

$ python
    version 2.7.5
$ python3.3
    version 3.3

我该如何设置,才能使每次运行$ python都打开3.3版本?


2
你可以使用 pyenv 来管理 Python 的版本。 - Shin Kim
https://dev59.com/IFUL5IYBdhLWcg3w27Jq - CodeFinity
21个回答

661

更改全局默认的Python解释器版本可能会破坏某些依赖于Python2的应用程序。

但是,您可以在大多数shell中使用别名命令。由于macOS中默认的shell(10.14及以下版本使用bash; 10.15版本使用zsh)共享类似的语法。您可以将 alias python='python3' 放入您的~/.profile文件中,然后在您的~/.bash_profile和/或~/.zsh_profile文件中加入如下一行代码:

[ -e ~/.profile ] && . ~/.profile

这样,您的别名将在不同的shell中起作用。

有了这个设置,python命令现在调用的是python3。如果您想偶尔调用“原始”的Python(指python2),您可以使用command python,它将保留别名并在所有shell中使用。

如果您更频繁地启动解释器(我会这样做),您也可以创建更多别名来添加,例如:

alias 2='python2'
alias 3='python3'

提示:对于脚本,可以使用以下方法代替shebang:

#!/usr/bin/env python

使用:

#!/usr/bin/env python3

这样,系统将使用python3来运行python 可执行文件


3
这个是不是应该放在 ~/.bash_profile 而不是 ~/.bash_aliases 中? - UnsettlingTrend
5
在我的OSX El Capitan终端中执行alias python=python3,然后运行python并没有起作用。我尝试将它保存在/.bash_aliases和/.bash_profile两个文件中都不行。 - Haymaker87
52
在编辑 ~/.bash_profile 文件后,请运行 source ~/.bash_profile - Wei Lu
17
你可以对pip进行相同的操作:alias pip='pip3.6' - tread
1
如果您使用virtualenv/virtualenvwrapper进行激活,是否仍需要在Python文件顶部使用#!/usr/bin/env python3或任何其他shebang +路径? @SantoshKumar - Edison
显示剩余11条评论

228
您可以通过符号链接来解决它。
unlink /usr/local/bin/python
ln -s /usr/local/bin/python3.3 /usr/local/bin/python

39
这是正确的答案(别名很好,但只能通过bash访问,这限制了您可以从哪里调用)。然而,我会使用unlink而不是rm来删除符号链接(如果您在rm上意外添加尾随斜杠,则可能会产生一些不良结果)。或者,您可以使用 ln -s -f ...,它应该会覆盖当前的符号链接。 - Chad Befus
3
对于期望 pythonpython2.7 的脚本,这会有什么后果吗? - Anton Tarasenko
32
macOS:unlink: /usr/bin/python: 操作不允许 - MarksCode
5
@MarksCode 尝试仅运行第二个原始行(即 ln -s... /local/)。 - EliadL
4
针对 Mac OS 用户,建议使用 brew 命令来自动创建符号链接。例如:brew unlink python、brew switch python 3.x.x_x(或2.x.x)、brew python link python(或python@2)。请注意,brew 安装的 Python 3 版本名为“python3”。 - jjwdesign
显示剩余10条评论

151
打开~/.bash_profile文件。
vi ~/.bash_profile

然后将别名设置如下:

alias python='python3'

现在保存文件,然后运行~/.bash_profile文件。

source ~/.bash_profile

恭喜您!现在,您可以通过键入python来使用Python3。

python --version

Python 3.7.3

->

Python 3.7.3

(无需翻译)

2
如果你像我一样发现pip也存在同样的问题(即pip --version仍然是2.7.x),那么你需要对pip3执行相同的步骤。打开vi ~/.bash_profile,添加alias pip='pip3',保存并运行source ~/.bash_profile,最后输入pip --version检查是否已成功更新。 - SnellyBigoda
7
每次重新打开终端时,我是否真的需要运行“source ~/.bash_profile”命令?因为每次关闭并重新打开终端后它会恢复到python2。 - Ricky Aguilar
1
@RickyAguilar 我也是。我的当前conda基础环境是3.8,我想将默认的Python更改为3.10。我已经通过注释现有的文件并添加 export PATH="/Applications/anaconda3/envs/py3.10/bin:$PATH" 来更改~/.bash_profile。在执行source之后它可以工作。但是,一旦我退出终端并重新打开,它仍然是py3.8。我需要再次执行source,这是不合理的。因为我可以使用conda activate py3.10。你有没有找到另一种解决方法? - CN_Cabbage
如果您已经安装了Visual Studio Code,那么使用它会很容易。可以使用code ~/.bash_profile代替使用vi ~/.bash_profile - zpvk
这段代码在我的Mac上运行成功了,谢谢。 - Rai Rz
这是唯一对我有效的解决方案。谢谢。 - undefined

139
我也遇到了这个问题,所以我想我应该发布一个更新的答案。请注意,这仅适用于基于Mac的设置(我没有尝试过Windows或任何Linux版本)。让这个工作最简单的方法是通过Brew安装Python。如果您还没有安装brew,您需要先安装它。安装完成后,在终端中执行以下操作:
brew install python

这将安装Python 3。安装完成后,运行以下命令:

ls -l /usr/local/bin/python*

您将看到由brew创建的与其Python安装相关的所有链接。它看起来会像这样:

lrwxr-xr-x  1 username  admin  36 Oct  1 13:35 /usr/local/bin/python3@ -> ../Cellar/python/3.7.4_1/bin/python3
lrwxr-xr-x  1 username  admin  43 Oct  1 13:35 /usr/local/bin/python3-config@ -> ../Cellar/python/3.7.4_1/bin/python3-config
lrwxr-xr-x  1 username  admin  38 Oct  1 13:35 /usr/local/bin/python3.7@ -> ../Cellar/python/3.7.4_1/bin/python3.7
lrwxr-xr-x  1 username  admin  45 Oct  1 13:35 /usr/local/bin/python3.7-config@ -> ../Cellar/python/3.7.4_1/bin/python3.7-config
lrwxr-xr-x  1 username  admin  39 Oct  1 13:35 /usr/local/bin/python3.7m@ -> ../Cellar/python/3.7.4_1/bin/python3.7m
lrwxr-xr-x  1 username  admin  46 Oct  1 13:35 /usr/local/bin/python3.7m-config@ -> ../Cellar/python/3.7.4_1/bin/python3.7m-config

在这个例子中,第一行显示了 python3 的符号链接。要将其设置为默认的 python 符号链接,请运行以下命令:

ln -s -f /usr/local/bin/python3 /usr/local/bin/python

同样地,您也可以设置 pip 符号链接

ln -s -f /usr/local/bin/pip3 /usr/local/bin/pip

您需要重新加载当前的终端 shell 才能在该 shell 中使用新的符号链接。运行以下命令以重新加载您的 shell:

exec $SHELL -l

现在你已经准备好了。现在,你可以做:

which python

它应该显示:

/usr/local/bin/python

所有新开启的 shell 会(应该)自动使用新的符号链接。为了测试这个功能,打开一个新的终端 shell 并运行以下命令:

python --version

5
做得很好。 - Nepo Znat
2
你需要重新加载当前的终端 shell,才能在该 shell 中使用新的符号链接。谢谢,这是迄今为止所有答案中我所缺失的部分。 - cs_pupil
2
这对我也起作用了。我想补充几点 - 1. 我正在使用 Mac M1,所以我必须运行 arch -arm64 brew install python & 2. pip 对我不起作用,所以我必须运行 sudo ln -s -f /usr/local/bin/pip3 /usr/local/bin/pip 然后 pip 就可以工作了。 - sohammondal
@sohammondal 谢谢你。我很感激你的意见。 - sknight
1
我尝试了许多解决方案,但只有这个有效 - 非常感谢!!! - Display name
显示剩余3条评论

36

打开终端并输入:

alias python=python3.x

这将设置默认的Python版本为Python3.x。


6
这对我起作用了,但是使用“alias python=python3”。 - Discant
6
这将暂时为该终端实例设置Python版本。 - Ashwin R

21

这对我很有效。我添加了别名(alias)并重启了我的终端(terminal)

alias python=/usr/local/bin/python3

17

以下方法对我有用

cd /usr/local/bin
mv python python.old
ln -s python3 python

12

前往“应用程序”,进入“Python”文件夹,那里应该有一个名为“Update Shell Profile.command”或类似的bash脚本。运行该脚本即可完成操作。

更新:看起来您不应该进行更新:如何更改默认的Python版本?


11
$ sudo ln -s -f $(which python3) $(which python)

完成。


2
ln: /usr/bin/python: 操作不允许 - Mustafa
ln:找到:没有这样的文件或目录 - voliveira89
用法:ln [-s [-F] | -L | -P] [-f | -i] [-hnv] source_file [target_file] ln [-s [-F] | -L | -P] [-f | -i] [-hnv] source_file ... target_dir link source_file target_file - dy_
@dy_ 您的评论不太清楚。请尝试执行以下命令:sudo ln -s -f $(which python3) /usr/local/bin/python - oori

11

我相信大多数来到这里的人都是使用iterm或其他方式使用ZSH,这将引导您到此答案

您必须在~/.zshrc中添加/修改您的命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接