Como posso instalar uma versão anterior do Python 3 no macOS usando o homebrew?

133

Como posso instalar uma versão anterior do Python 3 no macOS usando o brew?

Com o comando brew install python, obtive a versão mais recente do Python 3 (atualmente v3.7.0), mas quero a última versão do Python 3.6 (atualmente 3.6.5).

Eu li sobre outro pacote pyenvque pode ajudar a lidar com diferentes instalações de python, mas esta solução não é adequada para mim.

ePi272314
fonte
5
Pelo que vale a pena, o suporte da Homebrew para várias versões do Python é péssimo e está piorando progressivamente. Eu recomendo que você evite usar o Homebrew para instalar o Python. O Python.org fornece pacotes de instalação do macOS para várias versões do Python, que podem ser instaladas lado a lado (e lado a lado com uma instalação Homebrew Python, se você quiser). O uso desses pacotes ou o uso de uma ferramenta como pyenv acabará poupando muita dor a longo prazo.
Daniel Pryden 30/01/19

Respostas:

255

Resposta curta

Para fazer uma instalação limpa do 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

Se você preferir recuperar uma versão instalada anteriormente, então:

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

Resposta longa

Existem duas fórmulas para instalar o Python com o Homebrew: python@2e python.
O primeiro é para o Python 2 e o segundo para o Python 3.

Nota: Você pode encontrar respostas desatualizadas na web, onde é mencionado python3como o nome da fórmula para instalar o Python versão 3. Agora é só python!

Por padrão, com essas fórmulas, você pode instalar a versão mais recente da versão principal correspondente do Python. Portanto, você não pode instalar diretamente uma versão secundária como 3.6.

Solução

Com brew, você pode instalar um pacote usando o endereço da fórmula, por exemplo, em um repositório git.

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

Ou especificamente para Python 3

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

O endereço que você deve especificar é o endereço da última confirmação da fórmula (python.rb) para a versão desejada. Você pode encontrar o identificador do commint consultando o histórico de homebrew-core / Formula / python.rb

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

Python> 3.6.5

No link acima, você não encontrará uma fórmula para uma versão do Python acima da 3.6.5. Depois que os mantenedores desse repositório (oficial) lançaram o Python 3.7, eles enviaram apenas atualizações para a receita do Python 3.7.

Como explicado acima, no homebrew você tem apenas Python 2 (python @ 2) e Python 3 (python), não existe uma fórmula explícita para o Python 3.6 .

Embora essas pequenas atualizações sejam irrelevantes na maioria dos casos e na maioria dos usuários, procurarei se alguém fez uma fórmula explícita para a 3.6.

ePi272314
fonte
2
Como isso afetará ou interagirá com os pacotes do Homebrew que dependem do interpretador python3 padrão?
Telêmaco
1
De qualquer forma, um aplicativo dependente do Python (instalado ou não com o brew) procurará um executável python3 no caminho do aplicativo e você terá o python3 apontando para o python3.6. Portanto, seu Python 3 padrão será 3,6 (se você usar o exemplo acima) e isso deve ser suficiente. Python 3.7 é tão recente; Duvido que exista um aplicativo que exija explicitamente o Python 3.7, da mesma forma, não conheço nenhum aplicativo que funcione apenas com o Python 3.6. Em outras palavras. Você vai ficar bem :)
ePi272314
2
Eu instalei o 3.7 e recebi este erro: Error: python 3.7.0 is already installed To install 3.6.5_1, first run brew unlink python`` ao usar a 'resposta curta'.
Wuliwong 18/10/19
2
Obrigado por fornecer o link de confirmação direta para 3.6.5. Você me salvou de uma situação desesperadora.
tsalaroth
4
Eu sei que isso é um pouco mais antigo, mas estou tentando entender como você conseguiu o link para a fórmula. A versão atual do 3.6 é 3.6.7. Existe alguma abordagem simples para encontrar essa fórmula?
Diek
32

Como uma atualização, ao fazer

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

Você pode encontrar

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

Para ignorá-lo, adicione o --ignore-dependenciesargumento para instalar o brew.

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
fonte
1
e então você vai ter um pesadelo com o inferno da dependência ... como discourse.brew.sh/t/brew-install-python3-fails/1756/7
confiq
4
isso não funcionou para mim no começo; Essencialmente, foi necessário fazer isso: brew install --debug --ignore-dependencies raw.githubusercontent.com/Homebrew/homebrew-core/… e depois que ele falha no make html, ignore o erro selecionando 2). a falha do html / docs provavelmente irá me morder mais tarde, mas por enquanto está funcionando bem: shrug:
beans
20

O que fiz foi instalar o python 3.7

brew install python3
brew unlink python

então eu instalei o python 3.6.5 usando o link acima

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

Depois disso eu corri brew link --overwrite python . Agora eu tenho todos os pitães no sistema para criar os ambientes virtuais.

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 criar o ambiente 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 criar ambiente 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
fonte
1
Embora isso pareça ótimo, ele não funciona mais, o resultado é: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
Olhe atentamente minha resposta, para 3.6 você tem que escrever python3.6 -V. Você tem feito python3 -Visso é duas vezes porque você está recebendo 3.7.3duas vezes e perdendo3.6
Mian Asbat Ahmad
1
Para mim, isto oculta python3.6sob /usr/local/Cellar/python/3.6.5_1/bin. Depois de criar um link, ele funciona como você diz. Esse sistema de autogerenciamento em python parece ser um fractal rube goldberg de um milhão de programadores codificados pelo movimento browniano.
Eric Leschinski 07/07/19
11

Eu tentei todas as respostas acima para instalar o Python 3.4.4. A instalação do python funcionou, mas o PIP não seria instalado e nada que eu pudesse fazer para fazê-lo funcionar. Eu estava usando o Mac OSX Mojave, que causa alguns problemas com zlib, openssl.

O que não fazer:

  • Tente evitar o uso do Homebrew para a versão anterior fornecida pela fórmula Python ou Python3 .
  • Não tente compilar Python

Solução:

  1. Faça o download do instalador do macOS de 64 bits ou do instalador do macOS de 64 bits / 32 bits : https://www.python.org/downloads/release/python-365/
  2. Na etapa anterior, ele fará o download do Python 3.6.5 . Se, por exemplo, você quiser fazer o download do Python 3.4.4 , substitua no URL acima python-365 por python-344
  3. Download, clique no arquivo que você baixou e o instalador da GUI abrirá
  4. Se você baixou o python-365 , após a instalação, para iniciar esta versão do python, digitará o seu terminal python365 , a mesma coisa para o pip, será o pip365

ps: você não precisa desinstalar sua outra versão do Python no seu sistema.


Editar:


Encontrei uma solução muito, muito melhor, que funciona em MacOSX, Windows, Linux etc.

  1. Não importa se você já possui o python instalado ou não.
  2. Baixar Anaconda
  3. Uma vez instalado, no tipo de terminal: conda init
  4. No terminal, crie um ambiente virtual com qualquer versão python, por exemplo, escolhi 3.4.4:conda create -n [NameOfYour VirtualEnvironment] python=3.4.4
  5. Em seguida, no terminal, você pode verificar todo o ambiente virtual criado com o comando: conda info --envs
  6. Em seguida, no terminal, ative o ambiente virtual de sua escolha com: conda activate [The name of your virtual environment that was shown with the command at step 5]
vincedjango
fonte
9

Eu tentei de tudo, mas não consegui fazê-lo funcionar. Finalmente eu usei pyenve funcionou diretamente como um encanto.

Então, tendo homebrewinstalado, o juste faz:

brew install pyenv
pyenv install 3.6.5

para gerenciar virtualenvs:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

Veja pyenv e pyenv-virtualenv para mais informações.

EDIT (2019/03/19)

Eu achei o uso do pyenv-installer mais fácil do que o homebrew para instalar o pyenv e o pyenv-virtualenv direclty:

curl https://pyenv.run | bash

Para gerenciar a versão do python, globalmente:

pyenv global 3.6.5

ou localmente em um determinado diretório:

pyenv local 3.6.5
ClementWalter
fonte
Na verdade, isso não é responder diretamente à pergunta, mas contorná-la através de uma virtualenvabordagem.
javadba 17/04
1
na verdade, o virtualenv não é necessário. pyenvpermite gerenciar versões python sem a necessidade de usar um venv
ClementWalter 17/04
5

Caso alguém enfrente problemas de pip como abaixo

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

A causa principal é o openssl 1.1, que não suporta mais o python 3.6. Então você precisa instalar a versão antiga openssl 1.0

aqui está a solução:

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

Para resolver isso homebrew, você pode temporariamente voltar atrás homebrew-coree definir a HOMEBREW_NO_AUTO_UPDATEvariável para mantê-la no lugar:

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

Não recomendo a atualização permanente do homebrew-core, pois você perderá os patches de segurança, mas é útil para fins de teste.

Você também pode extrair versões antigas de fórmulas de homebrew para seu próprio toque (tap_owner / tap_name) usando o brew extractcomando:

brew extract python tap_owner/tap_name --version=3.6.5
Steven Peters
fonte
0

A maneira mais fácil para mim foi instalar o Anaconda: https://docs.anaconda.com/anaconda/install/

Lá, eu posso criar quantos ambientes quiser, com diferentes versões do Python, e alternar entre eles com um clique do mouse. Não poderia ser mais fácil.

Para instalar versões diferentes do Python, siga estas instruções https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html

Um novo ambiente de desenvolvimento com uma versão diferente do Python foi concluído em 2 minutos. E no futuro eu posso alternar facilmente.

klaaba
fonte