Homebrew: rollback da Python 3.7 a Python 3.6.5.x?


73

A brew upgradeaggiornato il mio sistema Python a Python 3.7. Sfortunatamente, Python 3.7 rompe altri software che devo usare (incluso ma non limitato a Ansible). Immagino che questi problemi verranno risolti nella prossima settimana o giù di lì, ma nel frattempo vorrei tornare a Python 3.6.5.x

A brew info pythonmostra che le versioni precedenti sono ancora installate e non eliminate:

➜ brew info python
python: stable 3.7.0 (bottled), HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python/3.6.5 (4,825 files, 100.8MB)
  Poured from bottle on 2018-03-31 at 20:21:57
/usr/local/Cellar/python/3.6.5_1 (4,788 files, 99.9MB)
  Poured from bottle on 2018-06-20 at 16:00:26
/usr/local/Cellar/python/3.7.0 (4,869 files, 103.3MB)
  Poured from bottle on 2018-07-01 at 19:30:37
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/python.rb

Vari brew linke brew installcomandi suggeriti da altri siti non sembrano funzionare:

➜ brew link python@3.6.5
Error: No such keg: /usr/local/Cellar/python@3.6.5
➜ brew link python@3.6.5_1
Error: No such keg: /usr/local/Cellar/python@3.6.5_1
➜ brew install python@3.6.5
Error: No available formula with the name "python@3.6.5" 
==> Searching for a previously deleted formula (in the last month)...
Error: No previously deleted formula found.
==> Searching for similarly named formulae...
==> Searching local taps...
Error: No similarly named formulae found.
==> Searching taps...
==> Searching taps on GitHub...
Error: No formulae found in taps.

10
Per coloro che non hanno 3.6.5_1 installato, c'è un modo per farlo tramite birra: stackoverflow.com/a/51125014/760905
— MartyMacGyver

Esiste una versione di Python 3.7.1. forse questo risolve i tuoi problemi.
— jmh

Risposte:


82

Se hai ancora le versioni precedenti disponibili, puoi semplicemente usare

brew switch python 3.6.5_1

1
Dammi un paio di mesi, sarò pronto per passare alla 3.7. Quando arriva quel giorno, come posso annullare questo brew switch ...comando per tornare alla 3.7?
— Peter Bengtsson,

In che cosa differisce dalla creazione di un ambiente virtuale collegato a Python 3.6.5?
— jmh

@jmh per qualche ragione i miei ambienti virtuali 3.6.5 si sono rotti quando ho usato Homebrew per aggiornare alla 3.7, e non ho ancora capito perché. Naturalmente, uno dei motivi per cui ho creato ambienti virtuali in primo luogo è stato quello di evitare questo problema. Tornare indietro risolto. Dato che nulla in 3.7 è fondamentale per me, per il momento sto solo con 3.6.5.
— knilsilooc,

2
Mi sono reso conto che la ragione di cui sopra è che il venv incorporato di Python crea collegamenti simbolici, che si interrompono quando si passa da Python 3.6.xa 3.7.x. La creazione di venvs python3 -m venv --copies venvcopia i file Python invece di creare collegamenti simbolici, il che impedisce loro di interrompersi durante l'aggiornamento della versione di Python.
— knilsilooc,

8
Error: python does not have a version "3.6.5_1" in the Cellar. python installed versions: 3.7.0
— mrgloom,

51

Se non hai una versione precedente su cui passare, puoi installare dalla formula precedente in questo modo:

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

Aggiornamento 2019-10

- avviso sulle dipendenze delignore

Nel caso in cui si stia utilizzando --ignore-dependenciesflag per superare l' recursive dependencyerrore, potrebbe verificarsi il seguente errore quando si esegue pip3 installdopo tale installazione:

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

Una soluzione alternativa potrebbe essere quella di installare prima le sue dipendenze (tutto tranne che sphinx-doc)

$ brew install pkg-config gdbm openssl readline sqlite xz

Si noti che ha bisogno openssle NON openssl@1.1 è l'ultima dipendenza in homebrew python 3.7.4_1


1
Penso che sarebbe utile se spiegassi anche cosa brew unlink pythonfa.
— nbro,

Inoltre, dovresti sottolineare che questo apparentemente non rimuove la tua attuale versione di Python 3.7 e che in seguito puoi tornare ad essa (usando ad esempio ciò che è suggerito https://apple.stackexchange.com/a/329192/90775 ).
— nbro,

9
Se si ottiene un problema di una dipendenza ricorsiva, questo può essere aggirato ignorando le dipendenze: brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb.
— Eric Wiener,

Se --ignore-dependenciesnon funziona a causa della sfinge, commentare la dipendenza nella sfinge e reinstallare la sfinge come descritto qui: pyimagesearch.com/2019/01/30/…
— thadk

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

11

Due opzioni

Per ripristinare una versione di Python precedentemente installata:

brew switch python 3.x.x_x # Ex. 3.6.5_1

Usa brew info pythonper vedere cosa hai installato in precedenza

Per eseguire un'installazione pulita di Python 3.6.5 utilizzare:

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

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

Puoi retrodatare temporaneamente 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
brew install vim --with-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

Fare il tuo tocco o trovare qualcuno che ha automatizzato la manutenzione della 3.6 e di altre serie con aggiornamenti è sicuramente il modo migliore per andare. Se lo fanno correttamente, puoi avere una versione pienamente qualificata e collegarla brew link python@3.6.x. Anche se pyenvè un'altra opzione.
— dragon788

-1

Non sono un esperto di questo, ma ho avuto lo stesso problema. Questo è ciò che ha funzionato per me: $ brew unlink python $ brew uninstall --ignore-dependencies python3 $ brew uninstall pipenv then from https://www.python.org/downloads/ installed python 3.6.6 $ brew install pipenv

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.