Homebrew: ¿Revertir de Python 3.7 a Python 3.6.5.x?

73

A brew upgradeactualizado mi sistema Python a Python 3.7. Desafortunadamente, Python 3.7 rompe otro software que necesito usar (incluidos, entre otros, Ansible). Me imagino que estos problemas se resolverán en la próxima semana más o menos, pero mientras tanto, me gustaría volver a Python 3.6.5.x

A brew info pythonmuestra que las versiones anteriores todavía están instaladas y no depuradas:

 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

Varios brew linky brew installcomandos sugeridos por otros sitios no parecen funcionar:

 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 "[email protected]" 
==> 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.
arcilla
fuente
10
Para aquellos que no tienen 3.6.5_1 instalado, hay una manera de obtenerlo a través de brew: stackoverflow.com/a/51125014/760905
MartyMacGyver
Hay una versión de Python 3.7.1. tal vez eso solucione tus problemas.
jmh

Respuestas:

82

Si todavía tiene las versiones anteriores disponibles, puede usar

brew switch python 3.6.5_1
knilsilooc
fuente
1
Dame un par de meses, estaré listo para cambiar a 3.7. Cuando llegue ese día, ¿cómo deshago este brew switch ...comando para volver a 3.7?
Peter Bengtsson
¿En qué se diferencia esto de crear un entorno virtual conectado a Python 3.6.5?
jmh
@jmh por alguna razón, mis entornos virtuales 3.6.5 se rompieron cuando utilicé Homebrew para actualizar a 3.7, y aún no he descubierto por qué. Por supuesto, una de las razones por las que hice entornos virtuales en primer lugar fue para evitar ese problema. Cambiar de nuevo lo arregló. Como nada en 3.7 es crítico para mí, solo me quedo con 3.6.5 por el momento.
knilsilooc
2
Me di cuenta de que la razón de lo anterior es que el venv incorporado de Python crea enlaces simbólicos, que se rompen cuando se pasa de Python 3.6.x a 3.7.x. Crear venvs con python3 -m venv --copies venvcopias de los archivos de Python en lugar de crear enlaces simbólicos, lo que evita que se rompan al actualizar su versión de Python.
knilsilooc
8
Error: python does not have a version "3.6.5_1" in the Cellar. python installed versions: 3.7.0
mrgloom el
51

Si no tiene una versión anterior para cambiar, puede instalar desde la fórmula anterior de esta manera:

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

Actualización 2019-10

- aviso de ignorar dependencias

En caso de que esté utilizando el --ignore-dependenciesindicador para superar el recursive dependencyerror, puede darle el siguiente error cuando lo haga pip3 installdespués de dicha instalación:

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

Una solución alternativa puede ser instalar primero sus dependencias (todo excepto sphinx-doc)

$ brew install pkg-config gdbm openssl readline sqlite xz

Tenga en cuenta que necesita openssly NO [email protected] cuál es la última dependencia en homebrew python 3.7.4_1

rinat.io
fuente
1
Creo que sería útil si también explicas qué brew unlink pythonhace.
nbro
Además, debe enfatizar que esto aparentemente no elimina su versión actual de Python 3.7, y que luego puede volver a usarla (por ejemplo, usando lo que se sugiere https://apple.stackexchange.com/a/329192/90775 ).
nbro
99
Si obtiene una cuestión acerca de una dependencia recursiva, esto se puede evitar haciendo caso omiso de las dependencias: brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb.
Eric Wiener
Si --ignore-dependenciesno funciona debido a sphinx, comente la dependencia en sphinx y vuelva a
thadk
Error: python contains a recursive dependency on itself: python depends on sphinx-doc sphinx-doc depends on python
punkrockpolly
11

Dos opciones

Para recuperar una versión de Python previamente instalada:

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

Use brew info pythonpara ver lo que ha instalado previamente

Para realizar una instalación limpia de Python 3.6.5 use:

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

Respuesta larga

Hay dos fórmulas para instalar Python con Homebrew: python@2y python.
El primero es para Python 2 y el segundo para Python 3.

Nota: Puede encontrar respuestas obsoletas en la web donde se menciona python3como el nombre de la fórmula para instalar Python versión 3. ¡Ahora es justo python!

De forma predeterminada, con estas fórmulas puede instalar la última versión de la versión principal correspondiente de Python. Por lo tanto, no puede instalar directamente una versión menor como 3.6.

Solución:

Con brew, puede instalar un paquete utilizando la dirección de la fórmula, por ejemplo en un repositorio de git.

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

O específicamente para Python 3

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

La dirección que debe especificar es la dirección de la última confirmación de la fórmula (python.rb) para la versión deseada. Puede encontrar el identificador de commint mirando el historial de homebrew-core / Formula / python.rb

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

Python> 3.6.5

En el enlace de arriba no encontrarás una fórmula para una versión de Python anterior a 3.6.5. Después de que los encargados del repositorio (oficial) lanzaron Python 3.7, solo envían actualizaciones a la receta de Python 3.7.

Como se explicó anteriormente, con homebrew solo tiene Python 2 (python @ 2) y Python 3 (python), no hay una fórmula explícita para Python 3.6 .

Aunque esas actualizaciones menores son irrelevantes en la mayoría de los casos y para la mayoría de los usuarios, buscaré si alguien ha hecho una fórmula explícita para 3.6.

ePi272314
fuente
1
github.com/sashkab/homebrew-python parece hacerlo
Grasshopper
2

Puede retroceder temporalmente homebrew-corey establecer la HOMEBREW_NO_AUTO_UPDATEvariable para mantenerlo en su lugar:

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

No recomiendo hacer retroceder permanentemente homebrew-core, ya que se perderán los parches de seguridad, pero es útil para fines de prueba.

También puede extraer versiones antiguas de fórmulas homebrew en su propio toque (tap_owner / tap_name) usando el brew extractcomando:

brew extract python tap_owner/tap_name --version=3.6.5
Steven Peters
fuente
Hacer su propio toque o encontrar a alguien que haya automatizado el mantenimiento de 3.6 y otras series con actualizaciones es definitivamente la mejor manera de hacerlo. Si lo hacen correctamente, puede tener una versión totalmente calificada y vincularla brew link [email protected]. Aunque pyenves otra opción también.
dragon788
-1

No soy un experto en esto, pero tuve el mismo problema. Esto es lo que funcionó para mí: $ 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

Becky
fuente