在Mac上将Python3设置为默认的Python:

114
我在这里想做的是将python3设为默认python。除了自动安装在Mac上的python 2.7之外,我使用homebrew安装了python3。我正在遵循的网站是http://docs.python-guide.org/en/latest/starting/install3/osx/#install3-osx
我想我很好地按照每个指令进行了操作,安装了最新的Xcode、命令行工具和homebrew。但是我的困惑在于以下部分:
“该脚本将解释它将进行的更改并在安装开始之前提示您。安装Homebrew后,请将Homebrew目录插入到PATH环境变量的顶部。您可以通过在~/.profile文件底部添加以下行来执行此操作。”
我真的很困惑这是什么,但我得出结论,我应该只需在~/.profile文件的底部添加以下行。所以我通过终端中的“open .profile”打开了~/.profile文件,并在底部添加了以下行。现在它看起来像这样:
export PATH=/usr/local/bin:/usr/local/sbin:$PATH
# Setting PATH for Python 3.6
# The original version is saved in .profile.pysave
export PATH=/usr/local/bin:/usr/local/sbin:$PATH

然后我执行了brew install python,希望在执行python --version时能看到python3。但是它只显示python 2.7.10。我想要默认的python是python3而不是2.7。
我从网站上找到了一个小线索。

我是否已安装Python 3?

$ python --version
Python 3.6.4

如果您仍然看到2.7,请确保 PATH / usr / local / bin / 优先于/ usr / bin /

PATH可能与此有关? 有人能用简单的英语解释一下PATH是什么,以及当我在终端中运行 python --version 时如何使我的默认python为python3吗?

4
仅使用python3(和pip3等)有什么问题吗?至少在2020年之前,这仍然是*nix系统的推荐解决方案(参见https://www.python.org/dev/peps/pep-0394/)。如果这多余了一个字符,请将别名`py`或`py3`设置为`python3`,这比`python`更短。或者,您考虑使用`venv`/`virtualenv`吗? - abarnert
1
同时,如果您想了解PATH是什么,您不应该在Python相关的资源中搜索,而应该查找通用的Unix资源。SuperUserAskDifferent可能比StackOverflow更相关,但实际上,您正在请求某人编写教程,已经有很多更好的在线教程了。 - abarnert
1
这里有两种不同的使用情况:你自己的和你的系统的。让macOS使用已安装的2.7版本,否则你将会遇到依赖问题。如果你想要编写Python程序,我强烈建议安装第二个专用发行版(例如Anaconda/conda,就像上面建议的virtualenv)。 - anon01
为什么我没有.profile文件? - Steve Boniface
显示剩余3条评论
5个回答

205

最安全和简便的方法可能是使用brew,然后只需修改您的PATH

首先更新brew:

brew update

接下来安装Python:

brew install python

这将安装并为python3创建符号链接,要了解更多详情,请执行:

brew info python

寻找警示:

==> Caveats
Python has been installed as
  /usr/local/bin/python3

Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, have been installed into
  /usr/local/opt/python/libexec/bin

然后将/usr/local/opt/python/libexec/bin添加到您的路径中:

export PATH=/usr/local/opt/python/libexec/bin:$PATH

PATH 的顺序很重要,将 /usr/local/opt/python/libexec/bin 放在最前面,能够优先选择 brew 安装的 Python3 版本而非系统中的 /usr/bin/python


14
我认为他们去年停止这样做了:https://github.com/Homebrew/homebrew-core/pull/14408 - avigil
1
执行这个操作,然后使用pip3 install -U pip更新pip会导致后续运行pip出现错误,错误信息为*pkg_resources.VersionConflict: (pip 19.1 (/usr/local/lib/python3.7/site-packages), Requirement.parse('pip==19.0.3'))*。 - orome
这大致符合我的要求,即使是从另一个Q&A https://superuser.com/questions/324616/how-should-i-set-the-path-variable-on-my-mac-so-the-hombrew-installed-tools-are 中获取的,不想要别名或系统默认更改,而是希望Homebrew来管理它,可能还有一个选项。这很接近但仍需要自定义别名。我也很好奇对pip进行进一步测试会揭示什么。 - Pysis
1
@philippos 对于Mac,可以将路径添加到/etc/paths中以使其永久生效 https://dev59.com/72Eh5IYBdhLWcg3wYSrt ,对于Linux,请参考此链接 https://www.cyberciti.biz/faq/how-to-add-to-bash-path-permanently-on-linux/。 - Abdurahman
3
这个答案适用于最新的Homebrew配方,其中在Caveats中列出了/usr/local/opt/python@3.9/libexec/bin,因为/usr/local/opt/python提供了适当的符号链接。 - Edward Brey
显示剩余3条评论

67

在我们进行更改之前,我的系统中的默认 python 版本是 python 2.7.17。

python --version

Python 2.7.17

通过替换 Ubuntu 中的 python2 将 python3 设置为默认 python。

  1. 打开终端。
  2. cd
  3. nano ~/.bashrc
  4. alias python=python3 (将此行添加到 .bashrc 文件的顶部)
  5. 按下 ctr+o (保存文件)
  6. 按下 Enter
  7. 按下 ctr+x (退出文件)
  8. source ~/.bashrc 或者 . ~/.bashrc (刷新 bashrc 文件)

python --version

Python 3.7.5


3
回答很简单明了。它适用于macOS Catalina 10.15.3。 - Collins USHI
3
尽管版本已更改为Python3,但默认的Python仍然是2.7。例如,当您打开新的Jupyter笔记本或安装新软件包时,活动的Python仍然是2.7。 - nightrain
1
如果找不到 ~/.bashrc 文件,以下答案非常有帮助。请检查是否存在 ~/.bash_profile 或者 ~/.zshenv 文件。 - Pravanjan
2
正如 @nightrain 指出的那样,这只能在某些情况下起作用。你并没有真正地在整个系统中选择一个新版本的 Python,这只会在直接从命令行调用 Python 时更改其使用方式(而不是从其他程序调用 Python,这些程序将不使用你的 bash 别名)。 - kingsfoil

27

更改系统范围内的默认Python版本可能会破坏一些依赖于python2的应用程序。另一个解决方案是创建一个别名

如果您使用的是zsh(在Mac OS上是默认的),请从终端运行以下命令:

echo 'alias python="python3"' >> ~/.zshrc
echo 'alias pip="pip3"' >> ~/.zshrc

这只适用于终端会话,但是如果您关闭终端并重新打开终端,则必须再次源bashrc。是否有永久解决方案? - BigDreamz
@BigDreamz,我不明白你所说的“permanent”是什么意思? - Lord Elrond
2
没关系,现在它对我有效了。我必须获取zshrc。 - BigDreamz
当使用brew安装python时,适用于macOS 12.6,还需要对pip3执行相同的操作。 - Vahid Amiri

5
根据这篇S.O.文章,更改默认的Python解释器可能会破坏依赖于Python 2的某些应用程序。
该文章还提到使用别名作为解决方案,而这个链接也可能是关于如何做到这一点的一个很好的参考。
个人而言,我只是在运行脚本或进入shell环境之前键入“Python3”,而不是“python”。

1
我决定这是最好的选择,就像你说的:“python3”。我只需要记得在安装新模块时也要输入“pip3”。嘿嘿。 - Doug Barbieri

0
我在使用Homebrew时遇到了同样的问题,但是为了解决这个问题,我不得不进行额外的手动步骤,因为我安装了太新的Python 3.11,而不是我想要的Python 3.10。
  • 我通过Homebrew安装了awscli,这导致了Python 3.11的安装

  • 我不得不重新安装Python 3.10

brew install python@3.10
brew link python@3.10

不过,即使在执行 python3 命令后,错误地获取了Python的错误版本。 因此,作为一个缺失的手动修复,我不得不执行以下操作:
ln -s /opt/homebrew/bin/python3.10 /opt/homebrew/bin/python3

然后您可以检查您 shell 的 .rc 文件中配置的 PATH 是否更偏爱(较高)/opt/homebrew/bin 的方式:
echo $PATH | tr ":" "\n"

/opt/homebrew/bin
/Users/moo/.local/bin
/Users/moo/go/bin
/Users/moo/.go/bin
/Users/moo/.nvm/versions/node/v16.15.0/bin
/Users/moo/.zsh/bin
...

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