Como uso o Python instalado pelo brew como o Python padrão?

188

Tento mudar para o Homebrew (depois de usar o fink e o macport) no Mac OS X 10.6.2. Eu instalei o python 2.7 com

brew install python 

O problema é que, ao contrário do Macport, parece que não há utilitário python_select, e meu python padrão do Mac é sempre o padrão

which python

Me dê

/usr/bin/python

e /usr/bin/pythonnão é um link simbólico

Como posso fazer para que o sabor do python brew seja meu python padrão?

sam
fonte
14
O homebew não sombreia mais a instalação do sistema do python. Você pode fazer: export PATH="/usr/local/opt/python/libexec/bin:$PATH"source: discourse.brew.sh/t/…
George
3
Eu tentei todas as respostas mencionadas, / usr / local / bin vem antes / usr / bin no meu $ PATH. Eu tentei o link de fermentação e desvinculei, o doutor de fermentação não relatou o problema / usr / bin antes de / usr / local / bin. Ainda quando eu faço qual python, recebo / usr / bin / python e não o instalado com o brew.
Ujwal Ratra
tente ... que python2
Fraser

Respostas:

118

Como você está usando o Homebrew, o seguinte comando fornece uma imagem melhor:

brew doctor

Resultado:

==> / usr / bin ocorre antes de / usr / local / bin Isso significa que os programas fornecidos pelo sistema serão usados ​​em vez dos fornecidos pelo Homebrew. Este é um problema se você, por exemplo. brew instalado Python.

Considere editar seu .bash_profile para colocar: / usr / local / bin à frente de / usr / bin no seu $ PATH.

Vishal
fonte
4
Verifique se você não possui / user / local / bin DUAS VEZES no seu caminho. Por alguma razão no meu PATH, ele apareceu antes e depois de / usr / bin e estava me deixando louco.
vinaut
1
muitos programas usam / usr / bin / python no cabeçalho, tornando essa solução não viável.
mschuett
5
para fermentação apenas em High Sierra python2está em / usr / local / bin, apenas python; set- export PATH="/usr/local/opt/python/libexec/bin:$PATH"in~/.bash_profile
tormodatt 31/01
86

Veja: Como vincular python no Homebrew?

$ brew link --overwrite python
Linking /usr/local/Cellar/python/2.7.3... 28 symlinks created
$ which python
/usr/local/bin/python
akauppi
fonte
11
por que isso não acontece quando eu instalo o python?
Ben West
4
@ BenWest porque python3, agora você obtém python2 em vez de python.
Georgexsh # 14/17
1
Eu não o tenho ativado.
theonlygusti
1
No meu caso, eu precisava para reiniciar o terminal depois de executar este comando (como observado por resposta de Martijn Courteaux )
jkmartindale
2
este ligações python @ 2 para mim
Andrew B.
63

Conserto rápido:

  1. Abrir /etc/paths
  2. Alterar a ordem das linhas (prioridade mais alta na parte superior)

No meu caso, /etc/pathsparece com:

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

Se você quiser saber mais sobre os caminhos no OSX, achei este artigo bastante útil:

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

Bijan
fonte
1
Obrigado, todas as respostas acima resolveram meu problema, mas você resolveu! Muito obrigado!
21412 Sean
7
o problema é que ele é alterado para todos os usuários: /, IMO é melhor alterar algo mais específico.
Randall caça
@RandallHunt como o quê e como?
Mike Kormendy
63

Conforme sugerido pelo próprio instalador do homebrew, adicione isso ao seu .bashrcou .zshrc:

export PATH="/usr/local/opt/python/libexec/bin:$PATH"
Pamput
fonte
11
Este é o método correto em High Sierra. Vote!
tormodatt
O MacOS assume como padrão o terminal zsh, então é provável que seja o .zshrcarquivo e não o .bashrcarquivo que precisa ser alterado.
user394430 30/03
1
Nenhuma das outras respostas funcionou para mim, exceto isso! executando o macOS Catalina aqui. Obrigado!
Ali Akbar
Esta é a resposta correta
HarshMarshmallow 06/07
44

Eu fiz "brew install python" para o OSX High Sierra. O $PATHtinha /usr/local/binantes de qualquer outro caminho, mas ainda which pythonestava apontando para o python do sistema.

Quando eu olhei mais fundo, descobri que não há executável em python /usr/local/bin. O executável é nomeado python2. Para corrigir esse problema, crie um link simbólico pythonapontando para python2:

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

Sachin Khot
fonte
4
Confirmado que isso corrige o problema no High Sierra
RandomDeduction
Você é meu herói. Não acredito que não percebi essa solução!
Smokin Joe
3
Também é necessário reiniciar o terminal para aplicar
lexa-b
3
$ cd / usr / local / bin $ ln -s python3 python
Pnemonic
1
e eu suponho também pip sym-link para pip3 (ou pip2)?
AlexP_Keaton
23

O Homebrew NÃO substitui os itens em "/ usr / bin". Você só quer colocar "/ usr / local / bin" à frente de "/ usr / bin" no seu caminho, depois "qual python" fornecerá "/ usr / local / bin / python".

Substituir / usr / bin / python (ou / usr / bin / ruby) não é recomendado.

Adam Vandenberg
fonte
2
Mas isso não acontece!
precisa saber é o seguinte
22

pythonA fórmula agora usa python3(v3.6.5 por enquanto), o brew vinculará o diretório :

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

Ele também irá vincular o binário :

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

Se você ainda precisar usar python2.x, use:

brew install python@2

Para usar o homebrew's python, basta colocar seu diretório no PATH, para bash:

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

para peixes:

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

Nota:

  1. isso sombreará a versão padrão do sistema python
  2. homebrew usado para vincular python /usr/local/share/pythonem versões mais antigas.
PickBoy
fonte
Esse foi o truque para mim. Por padrão, o brew instala python3no seu caminho - e não um executivo chamado python.. Referenciar especificamente /usr/local/opt/python/libeexec/binantes de outros diretórios no meu caminho resolvido as coisas.
Cam8001
13

Modifique seu $ PATH, adicione-o em seu bashrc ou bash_profile:

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

mais clique aqui: Edição nº 89791

Aben
fonte
Meu editor "PyCharm" estava usando ~ / .bashrc e não consegui fazer o python do brew funcionar até esta pequena jóia. Obrigado @Aben
JamesDeHart
10

Você precisa editar sua variável de ambiente PATH para garantir que onde o python homebrew esteja localizado, seja pesquisado antes de / usr / bin. Você também pode definir as coisas na sua configuração de shell para que uma variável como PYTHON seja configurada para a versão desejada do python e chamada $PYTHONem vez pythonda linha de comando.

Além disso, como outro pôster afirmou (e especialmente no mac) NÃO mexa com o python em / usr / bin para apontá-lo para outra instalação do python. Você está apenas pedindo problemas, se o fizer.

JoshAdel
fonte
9

Eu fiz brew install python, o meu $PATHfoi bom, mas ainda assim, which pythonme deu o sistema instalado. Reiniciar o terminal corrigiu-o.

Martijn Courteaux
fonte
1
Isso é tudo que eu precisava fazer. Não tenho certeza de quando fazer isso. Parece apenas executar brew install pythone, em seguida, reiniciar o terminal, e nada mais? Não há necessidade de brew unlink& brew link?
Con Antonakos
Logo após a instalação do python usando o brew, "qual python" me fornece o caminho local correto do python, mas o comando "python" indicava que era o sistema instalado invocando. Reinicie o terminal corrigido.
20517 Michelle
2
terminal de reinício Não é necessário, tentehash -r
georgexsh
JFC, eu estava enlouquecendo até ler isso. Eu já fiz brew unlink & brew linkvárias vezes. Necessário apenas para reiniciar o terminal
Dominic
6

pythonagora aponta para python3, se necessário python 2, faça: brew install python@2e, em seguida, no seu arquivo .zshrc ou .bashrc export PATH="/usr/local/opt/python@2/libexec/bin:$PATH" Now, pyhon --version= Python 2.7.14 e python3 --version= Python 3.6.4. Esse é o comportamento que estou acostumado a ver no meu terminal.

pixel 67
fonte
5

Acredito que existem meios para tornar o python homebrew padrão, mas, na minha opinião, a maneira correta de resolver um problema é não mexer nos caminhos python do sistema: é melhor criar um virtualenv no qual o python homebrew seria o padrão (usando virtualenv - opção -python). Usar ferramentas como python_selectquase sempre é uma má ideia.

Mikhail Korobov
fonte
2

Use pyenv para instalar e alternar entre versões do Python. Eu uso o rbenv há anos, o que faz a mesma coisa, mas para Ruby. Antes disso, era o inferno gerenciando versões.

Consulte a página do github do pyenv para obter instruções de instalação. Basicamente, é assim: - Instale o pyenv usando o homebrew. brew install pyenv - Adicione uma função ao final do script de inicialização do shell para que o pyenv possa fazer a mágica.echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

  • Use o pyenv para instalar quantas versões diferentes do Python você precisar. pyenv install 3.7.7.
  • Defina a versão padrão (global) para uma versão moderna que você acabou de instalar. pyenv global 3.7.7.
  • Se você trabalha em um projeto que precisa usar uma versão diferente do python, consulte pyevn local. Isso cria um arquivo na pasta do seu projeto que especifica a versão do python. O Pyenv procurará substituir a versão global do python pela versão nesse arquivo.
mpoisot
fonte
1

Apenas faça:

brew install python
brew link python

Depois de fazer isso, adicione isso ao seu bashrc ou bash_profile:

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

Aproveitar!

Aaditya Prasad
fonte
Parece que você encontrou o mesmo problema que eu. Todos os links que o brew cria, mesmo com os linkcomandos nas respostas aqui, /usr/local/binsão para e python2não para python. Usar um alias para solucionar isso parece uma péssima idéia, mas ainda não encontrei nada melhor.
Patrick M
Em vez de apelido, apenas copiei cp /usr/local/bin/python2 /usr/local/bin/pythone parecia funcionar bem. Esta é uma solução ainda mais feia?
kingb12
1

Adicione /usr/local/opt/python/libexec/binexplicitamente ao seu .bash_profile:

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

Depois disso, ele deve funcionar corretamente.

Dmytro Melnychuk
fonte
1

Se você é casca de peixe

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

Você pode editar / etc / caminhos. Aqui é minha:

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

Em seguida, adicione um link simbólico para a versão python. No meu caso

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

Voila!

Christian Oviedo Gabarda
fonte
0

Desde High Sierra, você precisa usar:

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

Isso ocorre porque /usr/localnão pode mais ser cantado

zaolian
fonte
-7

Não faço ideia do que você quer dizer com Python padrão. Considero uma prática ruim substituir o interpretador Python do sistema por uma versão diferente. A funcionalidade do sistema pode depender de alguma forma do Python do sistema e de módulos específicos ou de uma versão específica do Python. Em vez disso, instale suas instalações personalizadas do Python em um local diferente e seguro e ajuste seu $ PATH conforme necessário para chamá- lo de Python através de uma pesquisa de caminho, em vez de procurar o Python padrão.

Andreas Jung
fonte
5
não há risco no os x de ter o python do homebrew antes do python do sistema no caminho. Isso é muito comum.
Steven Noble
3
Além disso, a necessidade de usar um Python não Apple é real. Eu tenho tentado obter matplotlib, NumPy e SciPy em funcionamento com o Python 'padrão' (também conhecido como Apple). É algo sobre o tratamento de 32/64 bits que simplesmente separa as extensões. Muito, muito, muito feliz por ter uma boa cerveja em seu lugar. E, por padrão ('brew install python'), o Brew faz exatamente o que você quer dizer - instala o segundo Python em uma estrutura separada, não substituindo caminhos (e é exatamente por isso que essa questão SO surge).
#