Homebrew: Restauration de Python 3.7 à Python 3.6.5.x?

73

A brew upgrademis à niveau mon système Python vers Python 3.7. Malheureusement, Python 3.7 casse d'autres logiciels que je dois utiliser (y compris, mais sans s'y limiter, Ansible). J'imagine que ces problèmes seront résolus la semaine prochaine environ, mais dans l'intervalle, j'aimerais revenir à Python 3.6.5.x

A brew info pythonmontre 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 linket les brew installcommandes 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 "[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.
argile
la source
10
Pour ceux qui n'ont pas installé 3.6.5_1, il existe un moyen de l'obtenir par brassage: stackoverflow.com/a/51125014/760905
MartyMacGyver le
Il existe une version 3.7.1 de python. peut-être que cela résoudra vos problèmes.
jmh

Réponses:

82

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

brew switch python 3.6.5_1
Knilsilooc
la source
1
Donnez-moi quelques mois, je serai prêt à passer à 3,7. Quand ce jour vient, comment puis-je annuler cette brew switch ...commande pour revenir à 3.7?
Peter Bengtsson
En quoi cela diffère-t-il de la création d'un environnement virtuel associé à Python 3.6.5?
jmh
@jmh pour une raison quelconque, mes environnements virtuels 3.6.5 sont tombés en panne lorsque j'ai utilisé Homebrew pour mettre à jour vers la version 3.7, et je ne savais pas trop pourquoi. Bien sûr, l'une des raisons pour lesquelles j'ai créé des environnements virtuels au départ était d'éviter ce problème. Revenir en arrière a résolu le problème. Étant donné que rien dans la version 3.7 n'est critique pour moi, je ne m'en tiens qu'à la version 3.6.5 pour le moment.
knilsilooc
2
Je me suis rendu compte que la raison de ce qui précède est que venv intégré à Python crée des liens symboliques, qui cassent lors du passage de Python 3.6.x à 3.7.x. La création de venvs avec des python3 -m venv --copies venvcopies des fichiers Python au lieu de créer des liens symboliques, ce qui les empêche de se rompre lors de la mise à niveau de votre version de 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

Si vous ne disposez pas de la version précédente, vous pouvez installer de la même manière la formule précédente:

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

Mise à jour 2019-10

- note-dépendances remarque

Si vous utilisez un --ignore-dependenciesindicateur pour surmonter une recursive dependencyerreur, il se peut que l'erreur suivante vous apparaisse pip3 installaprès cette installation:

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

Une solution de contournement peut être d’installer d’abord ses dépendances (tout sauf sphinx-doc)

$ brew install pkg-config gdbm openssl readline sqlite xz

Notez qu’il faut opensslet PAS [email protected] une dernière dépendance de homebrew python 3.7.4_1.

rinat.io
la source
1
Je pense qu'il serait utile que vous expliquiez également ce qui se brew unlink pythonpasse.
Nbro
De plus, vous devez souligner que cela ne supprime apparemment pas votre version actuelle de Python 3.7 et que vous pouvez y revenir ultérieurement (en utilisant par exemple ce qui est suggéré https://apple.stackexchange.com/a/329192/90775 ).
Nbro
9
Si vous avez une question au sujet d' une dépendance récursive, ce qui peut être contournée en ignorant les dépendances: brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb.
Eric Wiener
Si --ignore-dependenciescela ne fonctionne pas à cause de sphinx, commentez la dépendance de sphinx et réinstallez sphinx comme décrit ici: 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

Deux options

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

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

Utilisez brew info pythonpour voir ce que vous avez déjà installé

Pour effectuer une nouvelle installation 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

Longue réponse

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

Remarque: vous pouvez trouver des réponses obsolètes sur le Web, où il est mentionné python3comme nom de formule pour l'installation de Python version 3. 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. Donc, vous ne pouvez pas installer directement une version mineure telle que 3.6.

Solution:

Avec brew, vous pouvez installer un paquet en utilisant l’adresse de la formule, par exemple dans un référentiel 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 de commande en consultant 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. Une fois que les responsables de ce référentiel (officiel) ont publié Python 3.7, ils ne soumettent que les mises à jour de la recette de Python 3.7.

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

Bien que ces mises à jour mineures ne soient généralement pas pertinentes dans la plupart des cas et pour la plupart des utilisateurs, je vais rechercher si quelqu'un a déjà utilisé une formule explicite pour 3.6.

ePi272314
la source
1
github.com/sashkab/homebrew-python semble le faire
Grasshopper
2

Vous pouvez temporairement antidater homebrew-coreet définir la HOMEBREW_NO_AUTO_UPDATEvariable pour la 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 de donner un antidatage permanent à l'homebrew-core, car vous manquerez de correctifs de sécurité, mais cela s'avère utile à des fins de test.

Vous pouvez également extraire d'anciennes versions de formules homebrew dans votre propre tap (propriétaire_ tap / nom_ tap) à l'aide de la brew extractcommande suivante:

brew extract python tap_owner/tap_name --version=3.6.5
Steven Peters
la source
Tourner votre propre robinet ou trouver quelqu'un qui a automatisé la maintenance de la série 3.6 et d'autres séries avec des mises à jour est certainement la meilleure voie à suivre. S'ils le font correctement, vous pouvez avoir une version entièrement qualifiée et la lier avec brew link [email protected]. Bien que pyenvsoit une autre option aussi.
dragon788
-1

Je ne suis pas un expert en la matière, mais j'ai le même problème. C'est ce qui a fonctionné pour moi: $ 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
la source