通过brew安装的Python无法覆盖系统自带的Python

20

我刚刚使用brew在OS X上安装了Python 3。现在,python3命令将使用brew Python 3.6启动解释器,但是python仍然使用默认系统Python 2.7打开解释器。

我的理解是,按照默认设置,brew Python 现在应该覆盖系统Python。(即参见PATH中/usr/bin和/usr/local/bin的顺序)。在我的路径中,/usr/local/bin位于/usr/bin之前,因此这不应该是一个路径问题。我尝试过重启终端,但没有效果。

如果相关,请看下面是我的完整路径。

/Users/**/.rvm/gems/ruby-1.9.3-p362/bin:/Users/**/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/**/.rvm/rubies/ruby-1.9.3-p362/bin:/Users/**/.rvm/bin:/Users/**/.rvm/bin:/Users/**/Python/PmagPy/programs/conversion_scripts2/:/Users/**/Python/PmagPy/programs/conversion_scripts/:/Users/**/Python/PmagPy/programs:/usr/local/heroku/bin:./bin:/usr/local/sbin:/usr/local/bin:/usr/local/share/npm/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/opt/X11/bin

为什么brew Python没有优先权?我该如何修复(或排除故障)?如果找不到其他选项,我可以创建一个别名,但我更喜欢了解发生了什么并找到问题的根源。

更新:

我查看了“可能重复”的问题,但我的问题似乎不是链接问题:

 ~ brew link --overwrite --dry-run python
Warning: Already linked: /usr/local/Cellar/python/3.6.4_4
To relink: brew unlink python && brew link python
 ~ 

可能是如何链接Homebrew Python版本并将其设置为默认值的重复问题。 - Brian Kung
3个回答

39

TL;DR 在你的.bash_profile(或等效)中添加以下内容:

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

Explanation

看起来通过homebrew安装的Python现在已有不同处理方式(参见https://docs.brew.sh/Homebrew-and-Python)。

  • python3 指向Homebrew的Python 3.x(如果已安装)
  • python2 指向Homebrew的Python 2.7.x(如果已安装)
  • python 指向Homebrew的Python 2.7.x(如果已安装),否则是macOS系统Python。 如果您希望将Homebrew的3.x Python添加到PATH中,请查看brew info python

查看brew info python,提示需要执行以下操作:

指向python3python3-configpip3等的非版本化符号链接pythonpython-configpip等分别已安装到/usr/local/opt/python/libexec/bin中

提示是你需要在路径中添加/usr/local/opt/python/libexec/bin,然后再添加/usr/bin(而不是一些来源中提到的/usr/local/bin,例如https://docs.python-guide.org/starting/install3/osx/)。
另请参见https://github.com/Homebrew/homebrew-core/issues/15746

2
在折腾了一个小时之后,终于搞定了!谢谢!!! - mariordev
我知道在 macOS 上不应该覆盖 /usr/bin/python 的系统安装 Python,那么这是为什么呢?我知道实际上并没有覆盖,但我认为这会产生相同的效果,即当程序尝试使用 Python 2 时,使依赖于 python 的程序使用 python3 - Rylan Polster
1
你说得没错,但是除非这个脚本兼容Python 2.x和3.x,否则我认为最好的做法是明确声明版本,如果它将以某种方式被系统运行,例如使用#!/usr/bin/env python3。请参见https://dev59.com/IWw05IYBdhLWcg3w_Guw#19305076。 - Claire Furney
1
我并不担心我的脚本,而是需要Python2的系统脚本。但是昨晚我意识到,这些脚本可能不受影响,因为它们可能明确声明需要Python 2,例如使用#!/usr/bin/env python2。我想这就是你所说的。感谢你的帮助! - Rylan Polster

5

使Homebrew Python生效的一行代码:

zsh

echo -n 'export PATH="/usr/local/opt/python/libexec/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc

bash

echo -n 'export PATH="/usr/local/opt/python/libexec/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc

解释:
>> 文件名 在文件末尾添加内容
source 文件名 重新加载文件


这对我来说可行,我使用的是2017年配备2.9 GHz四核Intel Core i7处理器的MacBook Pro,并运行macOS 12.6。 - Michael Roswell

-1

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