Come posso usare Homebrew per installare sia Python 2 che 3 su Mac?


146

Devo essere in grado di alternare tra Python 2 e 3. Come posso farlo usando Homebrew perché non voglio fare confusione con il percorso e mettermi nei guai. In questo momento ho 2.7 installato tramite Homebrew.


Si potrebbe desiderare di cambiare la domanda per rimuovere riferimento homebrew dal momento che non è necessariamente un requisito per raggiungere il tuo obiettivo (vedi la mia risposta qui sotto per esempio stackoverflow.com/a/49091638/2923369 )
Matt Schlobohm

Risposte:


288

Vorrei usare Pyenv È possibile installarlo:

$ brew install pyenv

Per abilitare pyenv nella tua shell Bash, devi eseguire:

$ eval "$(pyenv init -)"

Per farlo automaticamente per Bash all'avvio, aggiungi quella linea alla tua ~/.bash_profile. 1

Uso:

Dopo aver installato pyenv e averlo attivato, è possibile installare diverse versioni di python e scegliere quale è possibile utilizzare. Esempio:

$ pyenv install 2.7.5

Puoi controllare le versioni che hai installato con:

$ pyenv versions

E puoi passare tra le versioni di Python con il comando:

$ pyenv global 3.3.1

Inoltre puoi impostare una versione di Python per la directory corrente con:

$ pyenv local 3.5.2

Puoi controllare eseguendo python --version:

$ python --version
Python 3.5.2

1 Homebrew era solito insegnarti a farlo al momento dell'installazione di pyenv, ma il messaggio è stato rimosso . Per Zsh e altre shell, i passaggi precisi possono essere diversi.


Questa è la soluzione più semplice. Attualmente lo uso per passare da Python 3 a 2.7.x
Naz Mir

3
Se ho già installato Python 2.7 tramite homebrew , c'è qualcosa che dovrei occuparmi di usare pyenv ? Posso installare un altro Python 2.7 tramite Pyenv ?
Drake Guan,

3
Sì, puoi installare un altro Python 2.7 tramite Pyenv. Installerà quel pitone in $ PYENV_ROOT / versioni. L'altro python 2.7 installato tramite homebrew può apparire come "sistema" quando si eseguono "versioni di pyenv".
moliware,

5
Ho dovuto aggiungere eval "$(pyenv init -)"al mio .profile / .zshrc per far funzionare pyenv.
Rohmer,

5
@ilciavo, potresti dover aggiungere il eval "$(pyenv init -)"tuo ~ / .bash_profile
Jojanzing

77

Puoi avere entrambe le versioni installate contemporaneamente.

Per Homebrew> = 1.5.0:

Dal 1 ° marzo 2018 la pythonformula verrà aggiornata a Python 3.x, mentre python@2verrà aggiunta una nuova formula per Python 2.7, in particolare.

Vedi l' annuncio delle modifiche qui o il documento finale sull'uso di Homebrew per Python qui .

Per gli homebrew più anziani:

Per Python 2.x:

brew install python

Per Python 3.x:

brew install python3

Ora avrai entrambe le versioni installate sul tuo computer. Quando si desidera utilizzare la versione 2, utilizzare l' pythoneseguibile. Quando si desidera utilizzare la versione 3, utilizzare l' python3eseguibile.


la domanda riguarda l'uso di entrambi
meduz

grazie per l'aggiornamento! Ho seguito un percorso simile ma ho avuto problemi con la necessità di impostare PYTHONPATHad ogni modifica ... qualche idea? oltre a ciò, pyenvè fantastico.
Meduz,

9
Inoltre, nota che avendo python2 e python3 fianco a fianco, quel python punta a python2 e python3 punta a python3 come previsto. Tuttavia, un grosso problema è che pip non punta a pip2 come ci si potrebbe aspettare. Indica effettivamente pip3 (come ovviamente pip3). Per usare pip2, usa esplicitamente pip2. Un po 'incoerente con il suffisso non numerico per python punta a 2 ma il suffisso non numerico per pip punta a 3.
JD

5
Questo incasina gli eseguibili comuni come pip. python3 sovrascriverà python2 pip in questo caso e quello sarà il comando "pip" predefinito
kissgyorgy

1
In risposta al commento di @ kissgyorgy: ho avuto quel problema, l'ultimo commento su questo problema lo ha risolto per me github.com/Homebrew/legacy-homebrew/issues/50607 , correndo e python3 -m pip install -U --force-reinstall pippoi python -m pip install -U --force-reinstall piprimettendo le cose a pipriferirsi a Python 2 pip.
Harry,

11

Attualmente Homebrew fornisce due diverse formule per Python 2 e 3. brew install pythoninstalla python3 e brew install python@2installa python2. Maggiori dettagli nei documenti Homebrew:

https://docs.brew.sh/Homebrew-and-Python

Se al momento hai 2.x installato tramite Homebrew, Homebrew ti darà un messaggio come:

Error: python 2.7.14 is already installed
To upgrade to 3.6.5, run `brew upgrade python`

Se corri:

brew upgrade python

dovresti essere in grado di fare:

python --version

e

python3 --version

Per vedere quali versioni di Python 2.xe 3.x sono installate.


6

In alternativa, probabilmente puoi semplicemente inserire "python3" per eseguire la versione più recente di python3.x e "python" o "python2" per eseguire l'ultima versione 2.x installata.


4

Ci sono modi per usare entrambi, ma la soluzione più semplice oggi è usare pyenv . pyenv consente di passare facilmente da una versione all'altra. Ecco cosa ho fatto per impostare:

PASSO 1:

Rimuovi tutti i pitoni dal tuo mac

 brew uninstall --ignore-dependencies --force python
 sudo rm -rf ~/miniconda3/
 sudo rm -rf ~/.conda/

Rimuovere quanto segue da ~/.bash_profile

export PATH="/Users/ishandutta2007/miniconda3/bin:$PATH"

e anche il seguente da ~/.bashrc

export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH
export PYTHONPATH=/usr/local/lib/python2.7/site-packages/google:$PYTHONPATH
alias python="/usr/bin/python"

PASSAGGIO 2 :

Installa pyenv e le versioni di python necessarie

brew update
brew install pyenv
pyenv install 2.7
pyenv install 3.7.0

PASSAGGIO 3 :

aggiungere pyenv inita bash_profileobashrc

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

PASSO 4 :

Controlla cosa è stato installato

pyenv versions
  • sistema (impostato da /Users/ishandutta2007/.pyenv/version)

    2.7

    3.7.0

STEP5:

Scegli un valore predefinito

pyenv global 3.7.0

Quando un progetto richiede una versione precedente, basta andare nella sua cartella principale ed eseguire

pyenv local 2.7

1

Usa asdf !

Ballata di asdf

C'era una volta un linguaggio di programmazione
C'erano molte versioni di esso
Quindi la gente ha scritto un gestore delle
versioni per passare da una versione all'altra per progetti
diversi, vecchi, nuovi.

Poi sono arrivati ​​più linguaggi di programmazione
Quindi sono arrivati ​​più gestori di versione
e molti comandi per loro

Ne ho installati molti,
ho imparato molti comandi

Poi ho detto, solo un altro gestore delle versioni
che scriverò invece

Quindi, è arrivato un altro gestore delle
versioni come gestore delle versioni asdf : https://github.com/asdf-vm/asdf

Un gestore di versioni così estendibile
per cui chiunque può creare un plug-in
Per supportare la propria lingua preferita
Non è più necessario installare altri gestori di versioni
o apprendere più comandi

https://github.com/asdf-vm/asdf
https://github.com/tuvistavie/asdf-python
https://github.com/asdf-vm/asdf-plugins


Mi sembra che questi non siano strumenti concorrenti ma lo stesso strumento, implementato una volta (e talvolta più di una volta) per lingua. Un po 'come il motivo per cui abbiamo bisogno anche di qualcosa come LSP, IMHO. microsoft.github.io/language-server-protocol/overview
Matt Schlobohm,

1

Pensavo di avere lo stesso requisito - per spostarmi tra le versioni di Python - ma ho raggiunto tutto ciò di cui avevo bisogno solo con Python3.6 costruendo dal sorgente invece che usando homebrew.

git clone https://git.<theThingYouWantToInstall>

A seconda del repository, verificare se esiste già il file MAKE impostato per questa opzione.



-3

Ok, stavo lottando con la mia installazione brew di Python3, perché non avevo pip3

sudo pip3 command not found

e così ho fatto

brew uninstall --force --ignore-dependencies python3

e ho installato il normale Python 3.6.2 dalla distribuzione ufficiale e poi ho avuto pip3 e tutti i componenti erano ok.


OP chiede informazioni sull'installazione di entrambi.
Ajeet Ganga,
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.