Homebrew: Rollback von Python 3.7 auf Python 3.6.5.x?

72

Ein brew upgradeUpgrade meines Python-Systems auf Python 3.7. Leider bricht Python 3.7 andere Software, die ich verwenden muss (einschließlich, aber nicht beschränkt auf Ansible). Ich kann mir vorstellen, dass diese Probleme in der nächsten Woche behoben werden. In der Zwischenzeit möchte ich jedoch ein Rollback auf Python 3.6.5.x durchführen

A brew info pythonzeigt, dass frühere Versionen noch installiert und nicht gelöscht sind:

 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

Verschiedene brew linkund brew installvon anderen Websites vorgeschlagene Befehle scheinen nicht zu funktionieren:

 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.
Lehm
quelle
10
Für diejenigen, die 3.6.5_1 nicht installiert haben, gibt es eine Möglichkeit, es über brew zu beziehen
MartyMacGyver
Es gibt eine Python-Version 3.7.1. Vielleicht behebt das deine Probleme.
25.

Antworten:

82

Wenn Sie noch die vorherigen Versionen zur Verfügung haben, können Sie nur verwenden

brew switch python 3.6.5_1
knilsilooc
quelle
1
Geben Sie mir ein paar Monate Zeit, um auf 3.7 umzusteigen. Wie kann ich diesen brew switch ...Befehl an diesem Tag rückgängig machen , um zu 3.7 zurückzukehren?
Peter Bengtsson
Wie unterscheidet sich dies von der Erstellung einer virtuellen Umgebung, die an Python 3.6.5 angehängt ist?
JMH
@jmh aus irgendeinem Grund sind meine virtuellen 3.6.5-Umgebungen kaputt gegangen, als ich Homebrew zum Aktualisieren auf 3.7 verwendet habe, und ich habe nicht genau herausgefunden, warum. Natürlich war einer der Gründe, warum ich virtuelle Umgebungen erstellt habe, die Vermeidung dieses Problems. Zurückschalten repariert es. Da in 3.7 nichts für mich kritisch ist, halte ich mich vorerst nur an 3.6.5.
Knilsilooc
2
Ich erkannte, dass der Grund für das oben Genannte darin besteht, dass das in Python integrierte Venv Symlinks erstellt, die beim Übergang von Python 3.6.x zu 3.7.x abbrechen. Erstellen von Venvs mit python3 -m venv --copies venvKopien der Python-Dateien, anstatt Symlinks zu erstellen, um zu verhindern, dass diese beim Upgrade Ihrer Python-Version beschädigt werden .
Knilsilooc
8
Error: python does not have a version "3.6.5_1" in the Cellar. python installed versions: 3.7.0
Mrgloom
51

Wenn Sie keine Vorgängerversion haben, zu der Sie wechseln können, können Sie von der vorherigen Formel auf folgende Weise installieren:

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

Update 2019-10

--ignore-dependencies Nachricht

Falls Sie sich mit --ignore-dependenciesFlag zu überwinden recursive dependencyFehler, kann es die folgende Fehler geben , wenn Sie tun , pip3 installnach einer solchen Installation:

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

Eine Problemumgehung kann darin bestehen, zuerst die Abhängigkeiten zu installieren (alles außer sphinx-doc).

$ brew install pkg-config gdbm openssl readline sqlite xz

Beachten Sie, dass es NOT benötigt opensslund dies eine aktuelle Abhängigkeit in Homebrew Python 3.7.4_1 ist [email protected]

rinat.io
quelle
1
Ich denke, es wäre nützlich, wenn Sie auch erklären, was brew unlink pythontut.
Nr.
Darüber hinaus sollten Sie betonen, dass dies Ihre aktuelle Python 3.7-Version anscheinend nicht entfernt und Sie später wieder darauf zurückgreifen können (z. B. unter Verwendung von https://apple.stackexchange.com/a/329192/90775 ).
Nr.
9
Wenn Sie ein Problem über eine rekursive Abhängigkeit zu erhalten, kann diese durch Ignorieren Abhängigkeiten umgangen werden: brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb.
Eric Wiener
Wenn --ignore-dependencieses aufgrund von Sphinx nicht funktioniert, kommentieren Sie die Abhängigkeit in Sphinx aus und installieren Sie Sphinx neu, wie hier beschrieben: 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

Zwei Optionen

So stellen Sie eine zuvor installierte Python-Version wieder her:

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

Verwenden Sie, um brew info pythonzu sehen, was Sie zuvor installiert haben

So führen Sie eine Neuinstallation von Python 3.6.5 durch:

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

Lange Antwort

Es gibt zwei Formeln für die Installation von Python mit Homebrew: python@2und python.
Das erste ist für Python 2 und das zweite für Python 3.

Hinweis: Veraltete Antworten finden Sie im Web, wo sie python3als Formelname für die Installation von Python Version 3 angegeben werden. Jetzt ist es nur noch python!

Standardmäßig können Sie mit diesen Formeln die neueste Version der entsprechenden Hauptversion von Python installieren. Daher können Sie eine Nebenversion wie 3.6 nicht direkt installieren.

Lösung:

Mit brewkönnen Sie ein Paket unter Verwendung der Adresse der Formel installieren, beispielsweise in einem Git-Repository.

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

Oder speziell für Python 3

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

Die Adresse, die Sie angeben müssen, ist die Adresse bis zum letzten Festschreiben der Formel (python.rb) für die gewünschte Version. Sie finden die Commint-ID, indem Sie sich den Verlauf für homebrew-core / Formula / python.rb ansehen

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

Python> 3.6.5

Im obigen Link finden Sie keine Formel für eine Version von Python über 3.6.5. Nachdem die Betreuer dieses (offiziellen) Repository Python 3.7 veröffentlicht haben, übermitteln sie nur Aktualisierungen an das Rezept von Python 3.7.

Wie oben erläutert, gibt es bei Homebrew nur Python 2 (Python @ 2) und Python 3 (Python). Es gibt keine explizite Formel für Python 3.6 .

Obwohl diese geringfügigen Aktualisierungen in den meisten Fällen und für die meisten Benutzer zumeist irrelevant sind, suche ich, ob jemand eine explizite Formel für 3.6 erstellt hat.

ePi272314
quelle
1
github.com/sashkab/homebrew-python scheint es zu tun
Grasshopper
2

Sie können homebrew-coredie HOMEBREW_NO_AUTO_UPDATEVariable vorübergehend zurückdatieren und so einstellen , dass sie an ihrem Platz bleibt :

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

Ich empfehle keine dauerhafte Backdatierung des Homebrew-Kerns, da Sie Sicherheitspatches verpassen, aber dies ist zu Testzwecken nützlich.

Sie können auch alte Versionen von Homebrew-Formeln mit dem folgenden brew extractBefehl in Ihr eigenes Tap (tap_owner / tap_name) extrahieren :

brew extract python tap_owner/tap_name --version=3.6.5
Steven Peters
quelle
Machen Sie Ihren eigenen Tipp oder finden Sie jemanden, der die automatische Pflege von 3.6 und anderen Serien mit Updates durchgeführt hat. Dies ist definitiv der beste Weg. Wenn sie es richtig machen, können Sie eine vollqualifizierte Version haben und sie mit verknüpfen brew link [email protected]. Es pyenvist jedoch auch eine andere Option.
Dragon788
-1

Ich bin kein Experte in diesem Bereich, hatte aber das gleiche Problem. Das hat bei mir funktioniert: $ 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
quelle