Come posso installare una versione precedente di Python 3 in macOS usando homebrew?


133

Come posso installare una versione precedente di Python 3 in macOS usando brew?

Con il comando brew install pythonho ottenuto l'ultima versione di Python 3 (attualmente v3.7.0), ma voglio l'ultima versione di Python 3.6 (attualmente 3.6.5).

Ho letto di un altro pacchetto pyenvche può aiutare a gestire diverse installazioni di Python, ma questa soluzione non è adatta a me.


5
Per quello che vale, il supporto di Homebrew per più versioni di Python è spaventoso e sta progressivamente peggiorando. Consiglierei di evitare di usare Homebrew per installare Python. Python.org fornisce pacchetti di installazione di macOS per varie versioni di Python che possono essere installati uno accanto all'altro (e, se lo si desidera, fianco a fianco con un'installazione Homebrew Python). L'uso di questi pacchetti o l'utilizzo di uno strumento come pyenv alla fine ti farà risparmiare molto dolore a lungo termine.
Daniel Pryden,

Risposte:


256

Risposta breve

Per eseguire un'installazione pulita di Python 3.6.5 utilizzare:

brew unlink python # ONLY if you have installed (with brew) another version of python 3
brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

Se si preferisce ripristinare una versione precedentemente installata, quindi:

brew info python           # To see what you have previously installed
brew switch python 3.x.x_x # Ex. 3.6.5_1

Risposta lunga

Esistono due formule per l'installazione di Python con Homebrew: python@2e python.
Il primo è per Python 2 e il secondo per Python 3.

Nota: è possibile trovare risposte obsolete sul Web in cui viene indicato python3come nome della formula per l'installazione di Python versione 3. Ora è solo python!

Per impostazione predefinita, con queste formule è possibile installare l'ultima versione della versione principale corrispondente di Python. Pertanto, non è possibile installare direttamente una versione secondaria come 3.6.

Soluzione

Con brew, è possibile installare un pacchetto usando l'indirizzo della formula, ad esempio in un repository git.

brew install https://the/address/to/the/formula/FORMULA_NAME.rb

O specificamente per Python 3

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/COMMIT_IDENTIFIER/Formula/python.rb

L'indirizzo che devi specificare è l'indirizzo dell'ultimo commit della formula (python.rb) per la versione desiderata. È possibile trovare l'identificatore di commit guardando la cronologia di homebrew-core / Formula / python.rb

https://github.com/Homebrew/homebrew-core/commits/master/Formula/python.rb

Python> 3.6.5

Nel link sopra non troverai una formula per una versione di Python sopra 3.6.5. Dopo che i manutentori di quel repository (ufficiale) hanno rilasciato Python 3.7, inviano solo aggiornamenti alla ricetta di Python 3.7.

Come spiegato sopra, con homebrew hai solo Python 2 (python @ 2) e Python 3 (python), non esiste una formula esplicita per Python 3.6 .

Sebbene quegli aggiornamenti minori siano per lo più irrilevanti nella maggior parte dei casi e per la maggior parte degli utenti, cercherò se qualcuno ha fatto una formula esplicita per 3.6.


2
In che modo ciò influirà o interagirà con i pacchetti in Homebrew che si basano sull'interprete python3 predefinito?
Telemaco,

1
In ogni caso, le applicazioni dipendenti da Python (installate con brew o meno) cercheranno un eseguibile python3 nel percorso delle applicazioni e avrai python3 che punta a python3.6. Pertanto, il tuo Python 3 predefinito sarà 3.6 (se usi l'esempio sopra) e dovrebbe essere sufficiente. Python 3.7 è così recente; Dubito che ci sia un'applicazione che richiede esplicitamente Python 3.7, allo stesso modo, non conosco alcuna applicazione che funziona solo con Python 3.6. In altre parole.
Starai

2
Ho installato 3.7 e ricevuto questo errore: Error: python 3.7.0 is already installed To install 3.6.5_1, first run brew unlink python`` quando si usa la 'risposta breve'.
wuliwong,

2
Grazie per aver fornito il link di commit diretto per 3.6.5. Mi hai salvato da una situazione senza speranza.
Tsalaroth,

4
So che questo è un po 'più vecchio, ma sto lottando per capire come hai ottenuto il link alla formula. La versione attuale di 3.6 è 3.6.7, esiste un semplice approccio per trovare questa formula?
Diek,

32

Come aggiornamento, quando lo si fa

brew unlink python # If you have installed (with brew) another version of python
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

Potresti incontrare

Error: python contains a recursive dependency on itself:
  python depends on sphinx-doc
  sphinx-doc depends on python

Per aggirarlo, aggiungi l' --ignore-dependenciesargomento per preparare l'installazione.

brew unlink python # If you have installed (with brew) another version of python
brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

1
e poi avrai un incubo con l'inferno delle dipendenze ... come discourse.brew.sh/t/brew-install-python3-fails/1756/7
confiq

4
all'inizio non ha funzionato per me; essenzialmente doveva farlo: brew install --debug --ignore-dependencies raw.githubusercontent.com/Homebrew/homebrew-core/… e una volta fallito nel creare html, ignora l'errore selezionando 2). l'errore html / docs probabilmente mi morderà in seguito, ma per ora funziona benissimo: scrollata di spalle:
fagioli

20

Quello che ho fatto è stato prima di installare Python 3.7

brew install python3
brew unlink python

quindi ho installato Python 3.6.5 usando il link sopra

brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb --ignore-dependencies

Dopo quello ho corso brew link --overwrite python. Ora ho tutti i pitoni nel sistema per creare gli ambienti virtuali.

mian@tdowrick2~ $ python --version
Python 2.7.10
mian@tdowrick2~ $ python3.7 --version
Python 3.7.1
mian@tdowrick2~ $ python3.6 --version
Python 3.6.5

Per creare l'ambiente virtuale Python 3.7.

mian@tdowrick2~ $ virtualenv -p python3.7 env
Already using interpreter /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.7'
New python executable in /Users/mian/env/bin/python3.7
Also creating executable in /Users/mian/env/bin/python
Installing setuptools, pip, wheel...
done.
mian@tdowrick2~ $ source env/bin/activate
(env) mian@tdowrick2~ $ python --version
Python 3.7.1
(env) mian@tdowrick2~ $ deactivate

Per creare l'ambiente virtuale Python 3.6

mian@tdowrick2~ $ virtualenv -p python3.6 env
Running virtualenv with interpreter /usr/local/bin/python3.6
Using base prefix '/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/mian/env/bin/python3.6
Not overwriting existing python script /Users/mian/env/bin/python (you must use /Users/mian/env/bin/python3.6)
Installing setuptools, pip, wheel...
done.
mian@tdowrick2~ $ source env/bin/activate
(env) mian@tdowrick2~ $ python --version
Python 3.6.5
(env) mian@tdowrick2~ $ 

1
Anche se questo sembra fantastico, non funziona più, il risultato è:python -V && python3.7 -V && python3 -V && python3.6 -V Python 2.7.15 Python 3.7.3 Python 3.7.3 zsh: command not found: python3.6
Wafer

1
Guarda attentamente la mia risposta, per 3.6 devi scrivere python3.6 -V. Hai fatto python3 -Vdue volte questo è il motivo per cui stai ricevendo 3.7.3due volte e perdendo3.6
Mian Asbat Ahmad

1
Per me, questo si nasconde python3.6sotto /usr/local/Cellar/python/3.6.5_1/bin. Una volta creato un collegamento, funziona come dici tu. Questo sistema di autogestione in pitone sembra essere un rube goldberg frattale di un milione di programmatori che codifica per moto browniano.
Eric Leschinski,

11

Ho provato tutte le risposte sopra per installare Python 3.4.4. L'installazione di Python ha funzionato, ma PIP non sarebbe stato installato e nulla avrei potuto fare per farlo funzionare. Stavo usando Mac OSX Mojave, che causa alcuni problemi con zlib, openssl.

Cosa non fare:

  • Cerca di evitare l'uso di Homebrew per la versione precedente fornita dalla formula Python o Python3 .
  • Non provare a compilare Python

Soluzione:

  1. Scarica il programma di installazione macOS a 64 bit o il programma di installazione macOS a 64 bit / 32 bit : https://www.python.org/downloads/release/python-365/
  2. Nel passaggio precedente, verrà scaricato Python 3.6.5 , se ad esempio si desidera scaricare Python 3.4.4 , sostituirlo nell'URL sopra python-365 con python-344
  3. Download fare clic sul file che è stato scaricato per aprire un programma di installazione della GUI
  4. Se hai scaricato python-365 , dopo l'installazione, per avviare questa versione di python, digiterai il tuo terminale python365 , stessa cosa per pip, sarà pip365

ps: non è necessario disinstallare l'altra versione di Python sul sistema.


Modificare:


Ho trovato una soluzione molto migliore che funziona su MacOSX, Windows, Linux, ecc.

  1. Non importa se hai già installato Python o no.
  2. Scarica Anaconda
  3. Una volta installato, nel tipo di terminale: conda init
  4. Nel terminale, creare un ambiente virtuale con qualsiasi versione di Python, ad esempio, ho scelto 3.4.4:conda create -n [NameOfYour VirtualEnvironment] python=3.4.4
  5. Quindi, nel terminale, puoi controllare tutto l'ambiente virtuale che hai creato con il comando: conda info --envs
  6. Quindi, nel terminale, attiva l'ambiente virtuale di tua scelta con: conda activate [The name of your virtual environment that was shown with the command at step 5]

10

Ho provato di tutto ma non sono riuscito a farlo funzionare. Finalmente l'ho usato pyenve ha funzionato direttamente come un fascino.

Quindi, dopo aver homebrewinstallato, juste fare:

brew install pyenv
pyenv install 3.6.5

gestire virtualenvs:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

Vedi pyenv e pyenv-virtualenv per maggiori informazioni.

EDIT (2019/03/19)

Ho trovato usando il programma di installazione pyenv più facile di homebrew per installare pyenv e pyenv-virtualenv direttamente:

curl https://pyenv.run | bash

Per gestire la versione di Python, a livello globale:

pyenv global 3.6.5

o localmente in una determinata directory:

pyenv local 3.6.5

Questo in realtà non sta rispondendo direttamente alla domanda, ma piuttosto aggirandola con un virtualenvapproccio.
javadba,

1
in realtà il virtualenv non è necessario. pyenvti permette di gestire le versioni di Python senza la necessità di usare un Venv
ClementWalter il

6

Nel caso in cui qualcuno affronti problemi di pip come di seguito

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

La causa principale è openssl 1.1 non supporta più python 3.6. Quindi è necessario installare la vecchia versione di openssl 1.0

ecco la soluzione:

brew uninstall --ignore-dependencies openssl
brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

1

Per risolvere questo problema homebrew, puoi temporaneamente retrodatare homebrew-coree impostare la HOMEBREW_NO_AUTO_UPDATEvariabile per tenerla in posizione:

cd `brew --repo homebrew/core`
git checkout f2a764ef944b1080be64bd88dca9a1d80130c558
export HOMEBREW_NO_AUTO_UPDATE=1
brew install python

Non ti consiglio di retrodatare permanentemente homebrew-core, poiché ti perderai le patch di sicurezza, ma è utile a scopo di test.

Puoi anche estrarre vecchie versioni di formule homebrew nel tuo tocco (tap_owner / tap_name) usando il brew extractcomando:

brew extract python tap_owner/tap_name --version=3.6.5

0

Il modo più semplice per me è stato installare Anaconda: https://docs.anaconda.com/anaconda/install/

Lì posso creare tutti gli ambienti con diverse versioni di Python che desidero e passare da uno all'altro con un clic del mouse. Non potrebbe essere più semplice.

Per installare diverse versioni di Python basta seguire queste istruzioni https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html

Un nuovo ambiente di sviluppo con una diversa versione di Python è stato realizzato in 2 minuti. E in futuro posso facilmente passare avanti e indietro.

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.