79 votes

Homebrew : Retour en arrière de Python 3.7 à Python 3.6.5.x ?

A brew upgrade J'ai mis à jour mon système Python vers Python 3.7. Malheureusement, Python 3.7 casse d'autres logiciels que j'ai besoin d'utiliser (y compris, mais sans s'y limiter, Ansible). J'imagine que ces problèmes seront résolus d'ici une semaine environ, mais en attendant, j'aimerais revenir à Python 3.6.5.x.

A brew info python montre que les versions précédentes sont toujours installées et non purgées :

 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

Divers brew link y brew install Les commandes suggérées par d'autres sites ne semblent pas fonctionner :

 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 votes

Pour ceux qui n'ont pas la version 3.6.5_1 installée, il existe un moyen de l'obtenir via brew : stackoverflow.com/a/51125014/760905

0 votes

Il existe une version 3.7.1 de Python, qui résout peut-être vos problèmes.

0 votes

Pour ceux qui atterrissent ici à la recherche d'un moyen d'utiliser une ancienne version arbitraire de Python, essayez github.com/pyenv/pyenv (que vous pouvez installer avec brew)

92voto

Tim Sylvester Points 14047

Si vous avez encore les versions précédentes disponibles, vous pouvez simplement utiliser

brew switch python 3.6.5_1

2 votes

Dans quelques mois, je serai prêt à passer à la version 3.7. Quand ce jour arrivera, comment puis-je défaire ce brew switch ... pour revenir à la version 3.7 ?

0 votes

En quoi cela diffère-t-il de la création d'un environnement virtuel attaché à Python 3.6.5 ?

0 votes

@jmh pour une raison quelconque, mes environnements virtuels 3.6.5 se sont cassés lorsque j'ai utilisé Homebrew pour mettre à jour vers la 3.7, et je n'ai pas vraiment compris pourquoi. Bien sûr, l'une des raisons pour lesquelles j'ai créé des environnements virtuels en premier lieu était d'éviter ce problème. Le retour en arrière l'a réglé. Comme rien dans la 3.7 n'est critique pour moi, je m'en tiens à la 3.6.5 pour le moment.

62voto

rinat.io Points 721

Si vous n'avez pas de version précédente à laquelle passer, vous pouvez installer Python 3.6.5_1 de la formule précédente de cette façon :

$ brew unlink python

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

Si vous obtenez :

# --ignore-depeError: python contains a recursive dependency on itself:
  python depends on sphinx-doc
  sphinx-doc depends on python

...puis courir :

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

...au lieu de la dernière commande.

Si c'est le cas, vous obtiendrez l'erreur suivante lors de cette opération pip3 install après cette installation :

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

...alors une solution de contournement peut être d'installer ses dépendances en premier (tout sauf sphinx-doc )

$ brew install pkg-config gdbm openssl readline sqlite xz

Remarquez qu'il faut openssl y PAS openssl@1.1 qui est une dépendance récente de la version homebrew de Python 3.7.*.

1 votes

Je pense qu'il serait utile que vous expliquiez également ce que brew unlink python fait.

0 votes

De plus, vous devriez souligner que cela ne supprime pas apparemment votre version actuelle de Python 3.7, et que vous pourrez y revenir plus tard (en utilisant par exemple ce qui est suggéré https://apple.stackexchange.com/a/329192/90775 ).

9 votes

Si vous obtenez un problème concernant une dépendance récursive, vous pouvez le contourner en ignorant les dépendances : brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a‌​764ef944b1080be64bd8‌​8dca9a1d80130c558/Fo‌​rmula/python.rb .

14voto

ePi272314 Points 777

Deux options

Pour récupérer une version de Python précédemment installée :

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

Utilice brew info python pour voir ce que vous avez installé précédemment

Pour faire une installation propre de Python 3.6.5, utilisez :

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

Réponse longue

Il existe deux formules pour installer Python avec Homebrew : python@2 y python .
Le premier est pour Python 2 et le second pour Python 3.

Note : Vous pouvez trouver des réponses dépassées sur le web où il est mentionné python3 comme nom de formule pour l'installation de la version 3 de Python. Maintenant, c'est juste python !

Par défaut, avec ces formules, vous pouvez installer la dernière version de la version majeure correspondante de Python. Vous ne pouvez donc pas installer directement une version mineure comme 3.6.

Solution :

Avec brew vous pouvez installer un paquet en utilisant l'adresse de la formule, par exemple dans un dépôt git.

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

Ou spécifiquement pour Python 3

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

L'adresse que vous devez spécifier est l'adresse du dernier commit de la formule (Python.rb) pour la version souhaitée. Vous pouvez trouver l'identifiant du commit en regardant l'historique de homebrew-core/Formula/Python.rb

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

Python > 3.6.5

Dans le lien ci-dessus, vous ne trouverez pas de formule pour une version de Python supérieure à 3.6.5. Après que les mainteneurs de ce dépôt (officiel) aient publié Python 3.7, ils ne soumettent que des mises à jour de la recette de Python 3.7.

Comme expliqué ci-dessus, avec homebrew, vous ne disposez que de Python 2 (Python@2) et de Python 3 (Python), il n'y a pas de formule explicite pour Python 3.6 .

Bien que ces mises à jour mineures ne soient pas pertinentes dans la plupart des cas et pour la plupart des utilisateurs, je vais chercher si quelqu'un a fait une formule explicite pour la 3.6.

2 votes

0 votes

Pour 3.6, j'ai essayé d'installer à partir de l'URL et j'ai obtenu l'erreur 'Invalid usage : Installation of Python from a GitHub commit URL is unsupported ! brew extract python vers un robinet stable sur GitHub à la place'. J'ai fini par utiliser la réponse ici : stackoverflow.com/a/65308770/975592

4voto

Andrew Points 141

Suivant Étape 3 : rétrogradation de Python 3.7 à Python 3.6 sous MacOS Mojave Ici, ça a marché pour moi : https://www.pyimagesearch.com/2019/01/30/MacOS-mojave-install-tensorflow-and-keras-for-deep-learning/

2voto

Steven Peters Points 2041

Vous pouvez temporairement antidater homebrew-core et définir le HOMEBREW_NO_AUTO_UPDATE variable pour le maintenir en place :

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

Je ne recommande pas d'antidater de façon permanente homebrew-core, car vous ne bénéficierez pas des correctifs de sécurité, mais c'est utile pour les tests.

Vous pouvez également extraire les anciennes versions des formules homebrew dans votre propre robinet (tap_owner/tap_name) à l'aide de la fonction brew extract commandement :

brew extract python tap_owner/tap_name --version=3.6.5

0 votes

Faire votre propre robinet ou trouver quelqu'un qui a automatisé la maintenance des séries 3.6 et autres avec des mises à jour est certainement la meilleure façon de procéder. S'il le fait correctement, vous pouvez disposer d'une version entièrement qualifiée et la relier à la base de données de l'entreprise. brew link python@3.6.x . Bien que pyenv est également une autre option.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X