A brew upgrade
hat mein System Python auf Python 3.7 aktualisiert. Leider bricht Python 3.7 andere Software, die ich verwenden muss (einschließlich, aber nicht beschränkt auf Ansible). Ich gehe davon aus, dass diese Probleme in der nächsten Woche oder so behoben werden, aber in der Zwischenzeit möchte ich auf Python 3.6.5.x zurücksetzen
A brew info python
zeigt, 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 link
und brew install
Befehle, die von anderen Seiten vorgeschlagen werden, 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 "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.
Wenn Sie noch die Vorgängerversionen zur Verfügung haben, können Sie diese einfach verwenden
brew switch python 3.6.5_1
brew switch ...
Befehl rückgängig, um zu 3.7 zurückzukehren?python3 -m venv --copies venv
kopiert die Python-Dateien, anstatt Symlinks zu erstellen, wodurch verhindert wird, dass sie beim Upgrade Ihrer Python-Version beschädigt werden.Error: python does not have a version "3.6.5_1" in the Cellar. python installed versions: 3.7.0
python3 -m pip install virtualenv && python3 -m venv venv_name
brew pin python
, es dort zu belassen. Dadurch wird verhindert, dass Homebrew ein Upgrade durchführt, wenn Sie eine brew upgrade
.switch
Befehl entfernt, sodass dies nicht mehr funktioniert. Unter diesem Link finden Sie die Diskussion zum Entfernen der OptionWenn Sie keine vorherige Version haben, auf die Sie wechseln können, können Sie Python 3.6.5_1 von der vorherigen Formel auf diese Weise installieren:
$ brew unlink python
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb
Wenn Sie bekommen:
# --ignore-depeError: python contains a recursive dependency on itself:
python depends on sphinx-doc
sphinx-doc depends on python
...dann renne:
$ brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb
...anstelle des letzten Befehls.
In diesem Fall erhalten Sie pip3 install
nach einer solchen Installation die folgende Fehlermeldung:
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
... dann kann eine Problemumgehung 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 benötigt wird openssl
und NICHT openssl@1.1
, was eine neueste Abhängigkeit in Homebrew Python 3.7. * ist.
brew unlink python
funktioniert.brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb
.--ignore-dependencies
dies aufgrund von Sphinx nicht funktioniert, kommentieren Sie die Abhängigkeit in Sphinx aus und installieren Sie Sphinx wie hier beschrieben neu: pyimagesearch.com/2019/01/30/…Error: python contains a recursive dependency on itself: python depends on sphinx-doc sphinx-doc depends on python
So stellen Sie eine zuvor installierte Python-Version wieder her:
brew switch python 3.x.x_x # Ex. 3.6.5_1
Verwenden brew info python
Sie , um anzuzeigen, was Sie zuvor installiert haben
Verwenden Sie für eine Neuinstallation von Python 3.6.5 Folgendes:
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
Es gibt zwei Formeln für die Installation von Python mit Homebrew: python@2
und python
.
Der erste ist für Python 2 und der zweite für Python 3.
Hinweis: Sie können veraltete Antworten im Internet finden, wo es python3
als Formelname für die Installation von Python Version 3 erwähnt wird. Jetzt ist es nur noch python
!
Standardmäßig können Sie mit diesen Formeln die neueste Version der entsprechenden Hauptversion von Python installieren. Sie können also eine Nebenversion wie 3.6 nicht direkt installieren.
Mit brew
können Sie ein Paket über die 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 zum letzten Commit 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
Im obigen Link finden Sie keine Formel für eine Version von Python über 3.6.5. Nachdem die Betreuer dieses (offiziellen) Repositorys Python 3.7 veröffentlicht haben, reichen sie nur Updates für das Rezept von Python 3.7 ein.
Wie oben erklärt, haben Sie mit Homebrew nur Python 2 (python@2) und Python 3 (python), es gibt keine explizite Formel für Python 3.6 .
Obwohl diese kleineren Updates in den meisten Fällen und für die meisten Benutzer größtenteils irrelevant sind, werde ich suchen, ob jemand eine explizite Formel für 3.6 erstellt hat.
brew extract python
stattdessen zu einem stabilen Tap auf GitHub'. Am Ende habe ich die Antwort hier verwendet: stackoverflow.com/a/65308770/975592Der folgende Schritt Nr. 3: Downgrade von Python 3.7 auf Python 3.6 unter macOS Mojave hier hat für mich funktioniert: https://www.pyimagesearch.com/2019/01/30/macos-mojave-install-tensorflow-and-keras-for-deep -Lernen/
Sie können die Variable vorübergehend zurückdatieren homebrew-core
und so festlegen , dass sie an Ort und Stelle bleibt:HOMEBREW_NO_AUTO_UPDATE
cd `brew --repo homebrew/core`
git checkout f2a764ef944b1080be64bd88dca9a1d80130c558
export HOMEBREW_NO_AUTO_UPDATE=1
brew install python
brew install vim --with-python
Ich empfehle nicht, den Homebrew-Core dauerhaft zurückdatieren, da Sie Sicherheitspatches verpassen, aber es ist nützlich für Testzwecke.
Sie können mit dem folgenden Befehl auch alte Versionen von Homebrew-Formeln in Ihren eigenen Tap (tap_owner/tap_name) extrahieren brew extract
:
brew extract python tap_owner/tap_name --version=3.6.5
brew link python@3.6.x
. Obwohl pyenv
es auch eine andere Option ist.In meinem Fall habe ich mich gegen die Brew-Version entschieden und asdf verwendet , um mehrere Python-Versionen zu verwalten.
Angenommen, Sie haben bereits asdf installiert:
brew unklink python
asdf plugin-add python
asdf install python 3.6.9 && asdf global python 3.6.9
Für alle, die auf dieser Seite landen, ergänzen Sie die obige Antwort von rinat.io: Das Gebräu wurde geändert und das Extrahieren alter Formeln ist ein bisschen mühsam. Beziehen Sie sich auf dieses Problem https://github.com/kelaberetiv/TagUI/issues/635 , um alle OpenSSL-bezogenen Probleme mit pip zu lösen.
Ich bin kein Experte auf diesem Gebiet, 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
Ich konnte keine richtige Lösung für ein ähnliches Problem von mir finden (wobei vim unerwartet beendet wurde), um schnell auf die vorherige Version von Python zurückzusetzen.
Hier ist der Einzeiler, den ich oft benutze. In diesem Fall wäre es:
Haftungsausschluss: Einige Programme von Brew Manager erfordern aufgrund ihrer eigenen Abhängigkeiten möglicherweise andere Python-Versionen.
brew update && brew install python@3.6.5_1 && brew unlink python@3.7 && brew link python@3.6.5_1 --force && brew cleanup
Marty MacGyver
Natsfan
Peter W