Come uso brew installato Python come predefinito Python?


188

Provo a passare a Homebrew (dopo aver usato Fink e Macport) su Mac OS X 10.6.2. Ho installato Python 2.7 con

brew install python 

Il problema è che, contrariamente a Macport, sembra che non ci sia alcuna utilità python_select e il mio mac python predefinito è sempre predefinito

which python

mi dia

/usr/bin/python

e /usr/bin/pythonnon è un collegamento simbolico

Come posso fare per rendere Python brew flavour il mio pitone predefinito?


14
Homebew non ombreggia più l'installazione di sistema di Python. Puoi fare: export PATH="/usr/local/opt/python/libexec/bin:$PATH"fonte: discourse.brew.sh/t/…
George,

3
Ho provato tutte le risposte menzionate, / usr / local / bin viene prima di / usr / bin nel mio $ PATH. Ho provato a collegare e scollegare brew, brew doctor non ha segnalato un problema con / usr / bin prima di / usr / local / bin. Ancora quando faccio quale pitone, ottengo / usr / bin / python e non quello installato con brew.
Ujwal Ratra,

prova ... quale python2
Fraser il

Risposte:


118

Mentre stai usando Homebrew il seguente comando fornisce un'immagine migliore:

brew doctor

Produzione:

==> / usr / bin si verifica prima di / usr / local / bin Ciò significa che verranno utilizzati i programmi forniti dal sistema anziché quelli forniti da Homebrew. Questo è un problema se es. brew installato Python.

Valuta di modificare il tuo .bash_profile per mettere: / usr / local / bin davanti a / usr / bin nel tuo $ PATH.


4
Assicurati di non avere / user / local / bin DUE VOLTE nel tuo percorso. Per qualche motivo nel mio PERCORSO è apparso sia prima che dopo / usr / bin e mi stava facendo impazzire.
Vinaut

1
molti programmi usano / usr / bin / python nell'intestazione rendendo questa non una soluzione praticabile.
mschuett,

5
perché la birra in High Sierra python2è solo in / usr / local / bin, solo per python; ambientato export PATH="/usr/local/opt/python/libexec/bin:$PATH"a~/.bash_profile
tormodatt il

86

Vedi: Come collegare simbolicamente Python in Homebrew?

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

11
perché questo non succede quando installo Python?
Ben West,

4
@BenWest perché python3, ora ottieni python2 piuttosto che python.
georgexsh,

1
Non l'ho abilitato.
theonlygusti,

1
Nel mio caso, avevo bisogno di riavviare il terminale dopo aver eseguito questo comando (come notato dalla risposta di Martijn Courteaux )
jkmartindale

2
questo collega python @ 2 per me
Andrew B.

63

Soluzione rapida:

  1. Aperto /etc/paths
  2. Cambia l'ordine delle linee (massima priorità in alto)

Nel mio caso /etc/pathssembra:

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

Se vuoi sapere di più sui percorsi in OSX ho trovato questo articolo abbastanza utile:

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


1
Grazie, tutte le risposte sopra hanno risolto il mio problema, ma lo hai fatto! Grazie mille!
Sean,

7
il problema è che lo cambia per tutti gli utenti: /, IMO è meglio cambiare qualcosa di più specifico.
Randall Hunt,

@RandallHunt piace cosa e come?
Mike Kormendy,

63

Come suggerito dal programma di installazione homebrew stesso, assicurati di aggiungere questo al tuo .bashrco .zshrc:

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

11
Questo è il metodo corretto su High Sierra. Vota!
Tormodatt,

MacOS imposta automaticamente il terminale zsh, quindi è probabile che sia il .zshrcfile e non il .bashrcfile che deve cambiare.
user394430

1
Nessuna delle altre risposte ha funzionato per me tranne questo! con macOS Catalina qui. Grazie!
Ali Akbar

Questa è la risposta corretta
HarshMarshmallow

44

Ho fatto "brew install python" per OSX High Sierra. L' $PATHaveva /usr/local/binpreceduto da qualsiasi altro percorso, ma which pythonpuntava ancora al pitone del sistema.

Quando ho guardato più in profondità ho scoperto che non esiste un eseguibile python su /usr/local/bin. L'eseguibile è chiamato python2. Per risolvere questo problema, creare un collegamento simbolico che pythonpunta a python2:

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


4
Confermato ciò, risolve il problema su High Sierra
RandomDeduction il

Tu sei il mio eroe. Non riesco a credere che non ho realizzato questa soluzione!
Smokin Joe,

3
È inoltre necessario riavviare il terminale per applicare
lexa-b

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

1
e suppongo che anche sym-link pip a pip3 (o pip2)?
alexP_Keaton,

23

Homebrew NON sostituisce le cose in "/ usr / bin". Ti consigliamo di mettere "/ usr / local / bin" davanti a "/ usr / bin" nel tuo percorso, quindi "quale pitone" ti darà "/ usr / local / bin / python".

La sostituzione di / usr / bin / python (o / usr / bin / ruby) è altamente sconsigliata.


2
Ma non lo fa!
theonlygusti,

22

pythonformula ora utilizza python3(v3.6.5 per ora), brew collegherà la directory :

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

collegherà anche il binario :

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

Se hai ancora bisogno di usare python2.x, usa:

brew install python@2

Per usare homebrew python, basta mettere la sua directory in PATH, per bash:

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

per i pesci:

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

Nota:

  1. in questo modo verrà oscurata la versione predefinita di sistema di python
  2. homebrew era usato per collegare Python /usr/local/share/pythonnelle versioni precedenti.

Questo è stato il trucco per me. Per impostazione predefinita, brew installa python3nel tuo percorso, non un dirigente chiamato python. In particolare, facendo riferimento a /usr/local/opt/python/libeexec/binaltre directory del mio percorso, le cose sono state risolte.
cam8001,

13

Modifica il tuo $ PATH, aggiungilo nel tuo bashrc o bash_profile:

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

più clicca qui: Numero # 89791


Il mio editor "PyCharm" stava usando ~ / .bashrc e non sono riuscito a far funzionare il pitone di brew fino a quando questo piccolo gioiello. Grazie @Aben
JamesDeHart l'

10

È necessario modificare la variabile ambientale PATH per assicurarsi che ovunque sia localizzato il pitone homebrew sia cercato prima di / usr / bin. È anche possibile impostare le cose nella configurazione della shell in modo che una variabile come PYTHON sia impostata sulla versione desiderata di python e call $PYTHONanziché pythondalla riga di comando.

Inoltre, come ha affermato un altro poster (e specialmente su Mac) NON scherzare con Python in / usr / bin per puntarlo a un'altra installazione di Python. Stai solo chiedendo problemi se lo fai.


9

L'ho fatto brew install python, il mio $PATHera buono, ma comunque, which pythonmi ha dato il sistema installato uno. Il riavvio del terminale lo ha riparato.


1
Questo è tutto ciò che dovevo fare. Non sono sicuro di quando farlo, però. Sembra semplicemente eseguire brew install pythone quindi riavviare il terminale e nient'altro? Non c'è bisogno di brew unlink& brew link?
Con Antonakos il

Subito dopo aver installato Python usando brew, "quale python" mi ha dato il percorso python locale corretto, ma il comando "python" indicava che era il sistema a installare uno che invocava. Terminale di riavvio risolto.
Michelle,

2
il riavvio del terminale non è necessario, provarehash -r
georgexsh

JFC, stavo perdendo la testa fino a quando non ho letto questo. L'ho già fatto brew unlink & brew linkpiù volte. Necessario solo per riavviare il terminale
Dominic

6

pythonora indica python3, se necessario, python 2quindi: brew install python@2e quindi nel file .zshrc o .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. Questo è il comportamento che sono abituato a vedere nel mio terminale.


5

Credo che ci siano mezzi per rendere predefinito il python homebrew, ma a mio avviso il modo corretto di risolvere un problema non è quello di confondere con i percorsi python di sistema: è meglio creare un virtualenv in cui il python homebrew sia predefinito (usando virtualenv - opzione -python). Usare strumenti come python_selectè quasi sempre una cattiva idea.


2

Utilizzare invece pyenv per installare e passare da una versione all'altra di Python. Uso rbenv da anni, il che fa la stessa cosa, ma per Ruby. Prima di allora era l'inferno a gestire le versioni.

Consultare la pagina github di pyenv per le istruzioni di installazione. Fondamentalmente va così: - Installa pyenv usando homebrew. brew install pyenv - Aggiungi una funzione alla fine dello script di avvio della shell in modo che pyenv possa fare la sua magia.echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

  • Usa pyenv per installare le diverse versioni di Python di cui hai bisogno. pyenv install 3.7.7.
  • Impostare la versione (globale) predefinita su una versione moderna appena installata. pyenv global 3.7.7.
  • Se lavori su un progetto che deve utilizzare una versione diversa di Python, cerca in pyevn local. Questo crea un file nella cartella del tuo progetto che specifica la versione di Python. Pyenv sembrerà sovrascrivere la versione globale di Python con la versione in quel file.

1

Basta fare:

brew install python
brew link python

Dopo averlo fatto, aggiungi questo al tuo bashrc o bash_profile:

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

Godere!


Sembra che tu abbia incontrato lo stesso problema che ho fatto io. Tutti i collegamenti creati da brew, anche con i linkcomandi nelle risposte qui, /usr/local/binsono python2invece di python. Usare un alias per aggirare questo sembra una cattiva idea, ma non ho ancora trovato niente di meglio.
Patrick M,

Piuttosto che alias, l'ho appena copiato cp /usr/local/bin/python2 /usr/local/bin/pythone sembrava funzionare bene. È una soluzione ancora più brutta?
kingb12,

1

Aggiungi /usr/local/opt/python/libexec/binesplicitamente il tuo .bash_profile:

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

Dopodiché, dovrebbe funzionare correttamente.


1

Se sei un guscio di pesce

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

0

Puoi modificare / etc / percorsi. Ecco il mio:

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

Quindi aggiungere un collegamento simbolico per la versione di Python. Nel mio caso

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

Ecco!


0

Da High Sierra, devi utilizzare:

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

Questo perché /usr/localnon può più essere riconosciuto


-7

Non ho idea di cosa intendi con Python predefinito. Ritengo che sia una cattiva pratica sostituire l'interprete Python di sistema con una versione diversa. La funzionalità del sistema può dipendere in qualche modo dal sistema Python e dai moduli specifici o da una versione specifica di Python. Invece installare le installazioni personalizzate Python in un luogo diverso sicuro e regolare il $ PATH, se necessario, al fine di chiamare voi Python attraverso un percorso di ricerca, invece di cercare di default di Python.


5
in os x non c'è rischio che il pitone homebrew preceda il pitone del sistema nel percorso. Questo è molto comune
Steven Noble,

3
Inoltre, la necessità di utilizzare un Python non Apple è reale. Ho cercato di far funzionare matplotlib, NumPy e SciPy con Python "predefinito" (ovvero Apple). È qualcosa che riguarda il trattamento di 32/64 bit che fa semplicemente saltare le estensioni. Molto, molto, molto felice di avere una bella birra invece. E per impostazione predefinita ('brew install python') Brew fa esattamente ciò che intendi: installa il secondo Python su una struttura separata, non sostituendo i percorsi (che è esattamente il motivo per cui sorge questa domanda SO).
akauppi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.