如何使用brew安装的Python作为默认Python?


187

我尝试在Mac OS X 10.6.2上切换到Homebrew(在使用了fink和macport之后)。我已经安装了python 2.7

brew install python 

问题是,与Macport相反,似乎没有python_select实用程序,而我的默认mac python始终是默认的

which python

给我吗

/usr/bin/python

而且/usr/bin/python不是符号链接

我如何才能使python brew成为我的默认python?


14
Homebew不再掩盖python的系统安装。您可以这样做:资料export PATH="/usr/local/opt/python/libexec/bin:$PATH"来源:discourse.brew.sh/t/…–
乔治

3
我尝试了所有提到的答案,/ usr / local / bin在$ PATH中的/ usr / bin之前。我尝试了brew链接并取消链接,brew医生没有报告/ usr / bin在/ usr / local / bin之前的问题。仍然,当我执行哪个python时,我得到的是/ usr / bin / python而不是brew上安装的那个。
Ujwal Ratra

尝试...哪个python2
Fraser

Answers:


117

使用Homebrew时,以下命令可以提供更好的效果:

brew doctor

输出:

==> / usr / bin出现在/ usr / local / bin之前,这意味着将使用系统提供的程序代替Homebrew提供的程序。如果您例如这是一个问题。brew安装了Python。

考虑编辑.bash_profile,以将/ usr / local / bin放在$ PATH中的/ usr / bin之前。


4
确保您的路径中没有/ user / local / bin TWICE。由于某种原因,它在/ usr / bin之前和之后都出现了,这使我发疯。
vinaut

1
许多程序在标头中使用/ usr / bin / python,因此这不是可行的解决方案。
mschuett

5
仅在High Sierra中的brew才python2在/ usr / local / bin中python;设置 export PATH="/usr/local/opt/python/libexec/bin:$PATH"~/.bash_profile
tormodatt

86

请参阅:如何在Homebrew中符号链接python?

$ brew link --overwrite python
Linking /usr/local/Cellar/python/2.7.3... 28 symlinks created
$ which python
/usr/local/bin/python

10
为什么当我brew安装python时不会发生这种情况?
本西

4
@BenWest因为python3,现在您得到python2而不是python。
georgexsh

1
我没有启用它。
theonlygusti

1
就我而言,我需要在运行此命令后重启终端(如Martijn Courteaux的回答所述
jkmartindale

2
这为我链接了python @ 2
Andrew B.

63

快速解决:

  1. 打开 /etc/paths
  2. 更改行的顺序(最高优先级在顶部)

就我而言/etc/paths

/usr/local/bin
/usr/local/sbin
/usr/bin
/bin
/usr/sbin
/sbin

如果您想了解有关OSX中路径的更多信息,我发现本文非常有用:

http://muttsnutts.github.com/blog/2011/09/12/manage-path-on-mac-os-x-lion/


1
谢谢,以上所有答案确实解决了我的问题,但您做到了!非常感谢!
肖恩(Sean)

7
问题是它会为所有用户更改:/,IMO最好更改更具体的内容。
兰德尔·亨特

@RandallHunt喜欢什么以及如何?
Mike Kormendy

63

如自制软件安装程序本身所建议,请确保将其添加到您的.bashrc.zshrc

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

11
这是在High Sierra上正确的方法。投票!
tormodatt

MacOS默认为zsh终端,因此很有可能是.zshrc文件而不是.bashrc需要更改的文件。
user394430

1
除此以外,没有其他答案对我有用!在这里运行macOS Catalina。谢谢!
阿里·阿克巴尔

这是正确的答案
HarshMarshmallow

44

我为OSX High Sierra做过“ brew install python”。该$PATH/usr/local/bin任何其他的路径之前,但仍然which python是指向系统的蟒蛇。

当我深入研究时,发现处没有python可执行文件/usr/local/bin。可执行文件名为python2。要解决此问题,请创建python指向以下内容的符号链接python2

/usr/local/bin $: ln -s python2 python


4
确认这已解决了“高山脉”问题
RandomDeduction '18

你是我的英雄。不敢相信我没有意识到这个解决方案!
Smokin Joe,

3
还需要重新启动终端以进行申请
lexa-b

3
$ cd / usr / local / bin $ ln -s python3 python
肺炎

1
我想也可以将pip链接到pip3(或pip2)吗?
alexP_Keaton '18

23

自制软件不会替换“ / usr / bin”中的内容。您只需要在路径中将“ / usr / local / bin”放在“ / usr / bin”之前,然后“哪个python”将为您提供“ / usr / local / bin / python”。

强烈建议不要替换/ usr / bin / python(或/ usr / bin / ruby​​)。


2
但事实并非如此!
theonlygusti

22

python现在使用公式(目前python3为v3.6.5),brew将链接目录

/usr/local/opt/python -> ../Cellar/python/3.6.5

它还将链接二进制文件

/usr/local/bin/python3 -> ../Cellar/python/3.6.5/bin/python3

如果仍然需要使用python2.x,请使用:

brew install python@2

要使用homebrew python,只需将其目录放在PATH中以进行bash:

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

对于鱼:

set -x PATH /usr/local/opt/python/libexec/bin $PATH

注意:

  1. 这样做会遮盖系统的默认版本 python
  2. 用于将python链接到/usr/local/share/python较旧版本的homebrew 。

这是我的把戏。默认情况下,brew安装python3在您的路径中- 而不是名为python。的exec 。特别/usr/local/opt/python/libeexec/bin是在我的路径中其他目录的前面进行排序,以解决问题。
cam8001 '07年

13

修改$ PATH,将其添加到bashrc或bash_profile中:

export PATH=/usr/local/bin:/usr/local/sbin:~/bin:$PATH

更多点击这里: 问题#89791


我的编辑器“ PyCharm”使用〜/ .bashrc,直到这个小宝石,我无法使brew的python工作。谢谢@Aben
JamesDeHart

10

您需要编辑PATH环境变量,以确保在/ usr / bin之前搜索自制python所在的位置。您还可以在shell配置中进行设置,以将诸如PYTHON之类的变量设置为所需的python版本并调用,$PYTHON而不是python从命令行调用。

另外,正如另一位发帖人所述(尤其是在Mac上),请勿弄乱/ usr / bin中的python将其指向另一个python安装。您只是在自找麻烦。


9

我所做的brew install python,我的$PATH还是不错的,不过,which python给我的系统中安装了一个。重新启动终端,将其修复。


1
这就是我要做的。不过,我不确定何时执行此操作。听起来像只是执行brew install python然后重新启动终端,没有别的吗?不需要brew unlinkbrew link吗?
安·安托纳科斯

在使用brew安装python之后,“哪个python”为我提供了正确的本地python路径,但是“ python”命令表明这是系统安装的一个调用。重启终端固定好了。
米歇尔

2
无需重新启动终端,请尝试hash -r
georgexsh

JFC,直到我读到这篇文章,我才失去理智。我已经做过brew unlink & brew link几次了。只需要重启终端即可
Dominic '18

6

python现在指向python3,如果需要,python 2请执行以下操作: brew install python@2然后在.zshrc 或.bashrc文件中, export PATH="/usr/local/opt/python@2/libexec/bin:$PATH" 现在pyhon --version= Python 2.7.14和python3 --version= Python 3.6.4。这就是我在终端中经常看到的行为。


5

我相信有一些方法可以将自制的python设置为默认值,但我认为解决问题的正确方法是不要弄乱系统python的路径:最好创建一个virtualenv,其中默认使用自制的python(通过使用virtualenv- -python选项)。使用类似的工具python_select几乎总是一个坏主意。


2

改用pyenv在Python版本之间安装和切换。我已经使用rbenv多年了,但做的却是Ruby。在此之前,管理版本非常困难。

请查阅pyenv的github页面以获取安装说明。基本上是这样的:-使用自制软件安装pyenv。brew install pyenv -在shell启动脚本的末尾添加一个函数,以便pyenv可以做到。echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

  • 使用pyenv安装所需的许多不同版本的Python。pyenv install 3.7.7
  • 将默认(全局)版本设置为刚安装的现代版本。pyenv global 3.7.7
  • 如果您从事的项目需要使用其他版本的python,请查看pyevn local。这将在项目的文件夹中创建一个文件,该文件指定python版本。Pyenv将使用该文件中的版本替换全局python版本。

1

做就是了:

brew install python
brew link python

之后,将其添加到您的bashrc或bash_profile中:

alias python='/usr/local/bin/python2'

请享用!


听起来您遇到了我遇到的相同问题。brew创建的所有链接(即使使用link此处答案中的命令)也位于/usr/local/binfor中,python2而不是for 中python。使用别名解决此问题似乎是个坏主意,但我还没有发现更好的方法。
Patrick M

我只是复制了它cp /usr/local/bin/python2 /usr/local/bin/python,而不是别名,它似乎运行良好。这是一个更丑陋的解决方法吗?
kingb12


1

如果你是鱼壳

echo 'set -g fish_user_paths "/usr/local/opt/python/libexec/bin" $fish_user_paths' >> ~/.config/fish/config.fish

0

您可以编辑/ etc / paths。这是我的:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

然后为python版本添加一个符号链接。就我而言

$ cd /usr/local/bin
$ ln -s python3 python

瞧!


0

从High Sierra开始,您需要使用:

sudo chown -R $(whoami) $(brew --prefix)/*

这是因为/usr/local不再受宠


-7

完全不知道默认Python是什么意思。我认为用其他版本替换系统Python解释器是一种不好的做法。系统功能可能在某种程度上取决于系统Python和特定模块或特定Python版本。相反,在一个安全的不同的地方安装自定义的Python的安装,并根据需要,以调用调整$ PATH 查找,而不是Python的通过路径的寻找默认的Python。


5
在os x中,将自制的python放在路径中的系统python之前是没有风险的。这很常见。
史蒂芬·诺布尔

3
同样,使用非Apple Python的需求是真实的。我一直在尝试启动matplotlib,NumPy和SciPy并使用“默认”(又名Apple)Python运行。这是关于其对32/64位的处理,只是将扩展分开。相反,非常非常高兴有一个不错的Brew。默认情况下(“ brew install python”),Brew完全按照您的意思执行-将第二个Python安装到单独的结构中,而不覆盖路径(这就是为什么出现此SO问题的原因)。
akauppi'2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.