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 "[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.
argila
fonte
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
knilsilooc
fonte
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, [email protected] que é a mais recente dependência do homebrew python 3.7.4_1

rinat.io
fonte
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.

ePi272314
fonte
11
github.com/sashkab/homebrew-python parece fazer isso
Grasshopper
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
Steven Peters
fonte
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 [email protected]. 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

Becky
fonte