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.