Homebrew: reversão do Python 3.7 para o Python 3.6.5.x?


73

A brew upgradeatualizou meu sistema Python para Python 3.7. Infelizmente, o Python 3.7 quebra outro software que eu preciso usar (incluindo, sem limitação, o Ansible). Eu imagino que esses problemas serão resolvidos na próxima semana, mas, enquanto isso, eu gostaria de reverter para o Python 3.6.5.x

A brew info pythonmostra que as versões anteriores ainda estão instaladas e não eliminadas:

➜ 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

Vários brew linke brew installcomandos que são sugeridas por outros sites não parecem 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 "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
Para aqueles que não têm 3.6.5_1 instalado, há uma maneira de obtê-lo via bebida: stackoverflow.com/a/51125014/760905
— MartyMacGyver

Existe uma versão python 3.7.1. talvez isso resolva seus problemas.
— Jmh 25/11

Respostas:


82

Se você ainda tem as versões anteriores disponíveis, basta usar

brew switch python 3.6.5_1

11
Dê-me alguns meses. Estarei pronto para mudar para 3.7. Quando esse dia chegar, como desfazer este brew switch ...comando para voltar ao 3,7?
— Peter Bengtsson

Como isso difere da criação de um ambiente virtual anexado ao Python 3.6.5?
— jmh

@jmh, por algum motivo, meus ambientes virtuais 3.6.5 quebraram quando usei o Homebrew para atualizar para 3.7, e ainda não entendi o porquê. Obviamente, um dos motivos pelos quais criei ambientes virtuais foi evitar esse problema. Mudar de volta consertou. Como nada no 3.7 é crítico para mim, estou apenas com o 3.6.5 no momento.
— knilsilooc

2
Percebi que a razão para o exposto acima é que o venv interno do Python cria links simbólicos, que são quebrados ao passar do Python 3.6.x para 3.7.x. Criar venvs com python3 -m venv --copies venvcopia os arquivos Python em vez de criar links simbólicos, o que os impede de quebrar ao atualizar sua versão do 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 você não possui uma versão anterior, pode instalar a partir da fórmula anterior desta maneira:

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

Atualização 2019-10

--ignore-dependencies notice

Caso você esteja usando o --ignore-dependenciessinalizador para superar o recursive dependencyerro, ele poderá causar o seguinte erro pip3 installapós a instalação:

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

Uma solução alternativa pode ser instalar primeiro suas dependências (tudo, exceto sphinx-doc)

$ brew install pkg-config gdbm openssl readline sqlite xz

Observe que ele precisa openssle NÃO, openssl@1.1 que é a mais recente dependência do homebrew python 3.7.4_1


11
Eu acho que seria útil se você também explicasse o que brew unlink pythonfaz.
— Nvr

Além disso, você deve enfatizar que isso aparentemente não remove sua versão atual do Python 3.7 e que mais tarde você pode voltar para ela (usando, por exemplo, o que é sugerido https://apple.stackexchange.com/a/329192/90775 ).
— Nvr

9
Se você receber uma questão sobre uma dependência recursiva, isto pode ser contornado por ignorar dependências: brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb.
— Eric Wiener

Se --ignore-dependenciesnão funcionar devido à esfinge, comente a dependência na esfinge e reinstale a esfinge, conforme descrito aqui: 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

Duas opções

Para recuperar uma versão Python instalada anteriormente:

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

Use brew info pythonpara ver o que você instalou anteriormente

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

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.




2

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

Tornar seu próprio toque ou encontrar alguém que tenha automatizado a manutenção da série 3.6 e outras com atualizações é definitivamente o melhor caminho a percorrer. Se o fizerem corretamente, você poderá ter uma versão totalmente qualificada e vinculá-la brew link python@3.6.x. Embora pyenvseja outra opção também.
— dragon788 19/03

-1

Não sou especialista nisso, mas tive o mesmo problema. Isto é o que funcionou para mim: $ 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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.