¿Cómo puedo instalar una versión anterior de Python 3 en macOS usando homebrew?

133

¿Cómo puedo instalar una versión anterior de Python 3 en macOS usando brew?

Con el comando brew install pythonobtuve la última versión de Python 3 (actualmente v3.7.0), pero quiero la última versión de Python 3.6 (actualmente 3.6.5).

He leído sobre otro paquete pyenvque puede ayudar a manejar diferentes instalaciones de Python, pero esta solución no es adecuada para mí.

ePi272314
fuente
55
Por lo que vale, el soporte de Homebrew para múltiples versiones de Python es abismal y está empeorando progresivamente. Te recomendaría que evites usar Homebrew para instalar Python. Python.org proporciona paquetes de instalación de macOS para varias versiones de Python que se pueden instalar uno al lado del otro (y uno al lado del otro con una instalación de Homebrew Python si lo desea). El uso de esos paquetes o una herramienta como pyenv finalmente le ahorrará mucho dolor a largo plazo.
Daniel Pryden

Respuestas:

255

Respuesta corta

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

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

Si prefiere recuperar una versión instalada previamente, entonces:

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

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
2
¿Cómo afectará esto o interactuará con los paquetes en Homebrew que dependen del intérprete de python3 predeterminado?
Telémaco
1
En cualquier caso, las aplicaciones que dependen de Python (instaladas con brew o no) buscarán un ejecutable de python3 en la ruta de las aplicaciones, y tendrá python3 apuntando a python3.6. Por lo tanto, su Python 3 predeterminado será 3.6 (si usa el ejemplo anterior) y eso debería ser suficiente. Python 3.7 es muy reciente; Dudo que haya una aplicación que requiera explícitamente Python 3.7, de la misma manera, no conozco ninguna aplicación que solo funcione con Python 3.6. En otras palabras. Estarás bien :)
ePi272314
2
Tengo 3.7 instalado y recibí este error: Error: python 3.7.0 is already installed To install 3.6.5_1, first run brew unlink python '' cuando uso la 'respuesta corta'.
wuliwong
2
Gracias por proporcionar el enlace de confirmación directa para 3.6.5. Me salvaste de una situación desesperada.
tsalaroth el
44
Sé que esto es un poco más antiguo, pero estoy luchando por descubrir cómo obtuviste el enlace a la fórmula. La versión actual de 3.6 es 3.6.7, ¿hay algún enfoque simple para encontrar esta fórmula?
diek
32

Como una actualización, al hacer

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

Puede encontrar

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

Para evitarlo, agregue el --ignore-dependenciesargumento para preparar la instalación.

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
amiabl
fuente
1
y luego tendrás una pesadilla con el infierno de la dependencia ... como discurso.brew.sh/t/brew-install-python3-fails/1756/7
confiq
44
esto no funcionó para mí al principio; esencialmente tenía que hacer esto: brew install --debug --ignore-dependencies raw.githubusercontent.com/Homebrew/homebrew-core/… y una vez que falla en hacer html, simplemente ignore el error seleccionando 2). el fracaso html / docs probablemente muérdeme más adelante, pero por ahora se está trabajando muy bien: encogimiento de hombros:
granos de
20

Lo primero que hice fue instalar Python 3.7

brew install python3
brew unlink python

luego instalé python 3.6.5 usando el enlace de arriba

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

Después de eso corrí brew link --overwrite python. Ahora tengo todas las pitones en el sistema para crear los entornos virtuales.

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

Para crear el entorno virtual 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

Para crear un entorno virtual 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~ $ 
Mian Asbat Ahmad
fuente
1
Si bien parece que sería genial, ya no funciona, el resultado es: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
Mira de cerca mi respuesta, para 3.6 tienes que escribir python3.6 -V. Lo has hecho python3 -Vdos veces, por eso te pierdes 3.7.3dos veces y te pierdes3.6
Mian Asbat Ahmad
1
Para mí, esto se esconde python3.6debajo /usr/local/Cellar/python/3.6.5_1/bin. Una vez que hice un enlace, funciona como tú dices. Este sistema de autogestión de Python parece ser un fractal rube goldberg de un millón de programadores que codifican por movimiento browniano.
Eric Leschinski
11

Intenté todas las respuestas anteriores para instalar Python 3.4.4. La instalación de Python funcionó, pero PIP no se instaló y no pude hacer nada para que funcione. Estaba usando Mac OSX Mojave, que causa algunos problemas con zlib, openssl.

Qué no hacer:

  • Intente evitar usar Homebrew para la versión anterior dada por la fórmula Python o Python3 .
  • No intentes compilar Python

Solución:

  1. Descargue el instalador macOS de 64 bits o el instalador macOS de 64 bits / 32 bits : https://www.python.org/downloads/release/python-365/
  2. En el paso anterior, descargará Python 3.6.5 , si, por ejemplo, desea descargar Python 3.4.4 , reemplace en la url anterior python-365 por python-344
  3. Descargar haga clic en el archivo que descargó se abrirá un instalador de GUI
  4. Si descargaste python-365 , después de la instalación, para iniciar esta versión de python, escribirás en tu terminal python365 , lo mismo para pip, será pip365

ps: no tienes que desinstalar tu otra versión de Python en tu sistema.


Editar:


Encontré una solución mucho mejor que funciona en MacOSX, Windows, Linux, etc.

  1. No importa si ya tienes Python instalado o no.
  2. Descargar Anaconda
  3. Una vez instalado, en tipo de terminal: conda init
  4. En la terminal, cree un entorno virtual con cualquier versión de Python, por ejemplo, elegí 3.4.4:conda create -n [NameOfYour VirtualEnvironment] python=3.4.4
  5. Luego, en la terminal, puede verificar todo el entorno virtual que ha creado con el comando: conda info --envs
  6. Luego, en la terminal, active el entorno virtual de su elección con: conda activate [The name of your virtual environment that was shown with the command at step 5]
vincedjango
fuente
9

He intentado todo pero no pude hacerlo funcionar. Finalmente lo he usado pyenvy funcionó directamente como un encanto.

Entonces, una vez homebrewinstalado, juste do:

brew install pyenv
pyenv install 3.6.5

para gestionar virtualenvs:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

Ver pyenv y pyenv-virtualenv para más información.

EDITAR (19/03/2019)

He encontrado que usar pyenv-installer es más fácil que homebrew para instalar pyenv y pyenv-virtualenv direclty:

curl https://pyenv.run | bash

Para administrar la versión de Python, ya sea globalmente:

pyenv global 3.6.5

o localmente en un directorio dado:

pyenv local 3.6.5
ClementWalter
fuente
En realidad, esto no responde directamente a la pregunta, sino que la elude mediante un virtualenvenfoque.
javadba
1
en realidad el virtualenv no es necesario. pyenvle permite administrar versiones de python sin la necesidad de usar un venv
ClementWalter
5

En caso de que alguien se enfrente al problema de pip como a continuación

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

La causa raíz es openssl 1.1 ya no es compatible con Python 3.6. Por lo tanto, debe instalar la versión anterior openssl 1.0

Aquí está la solución:

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

Para resolver esto homebrew, 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

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
0

La forma más fácil para mí fue instalar Anaconda: https://docs.anaconda.com/anaconda/install/

Allí puedo crear tantos entornos con diferentes versiones de Python como quiera y cambiar entre ellos con un clic del mouse. No podría ser más fácil.

Para instalar diferentes versiones de Python solo siga estas instrucciones https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html

Se realizó un nuevo entorno de desarrollo con una versión diferente de Python en 2 minutos. Y en el futuro puedo cambiar fácilmente de un lado a otro.

klaaba
fuente