Wie kann ich eine frühere Version von Python 3 unter macOS mit Homebrew installieren?


133

Wie kann ich eine frühere Version von Python 3 unter macOS mit Brew installieren?

Mit dem Befehl habe brew install pythonich die neueste Version von Python 3 (derzeit v3.7.0) erhalten, aber ich möchte die letzte Version von Python 3.6 (derzeit 3.6.5).

Ich habe über ein anderes Paket gelesen pyenv, das bei der Handhabung verschiedener Python-Installationen helfen kann, aber diese Lösung ist für mich nicht geeignet.


5
Für das, was es wert ist, ist Homebrews Unterstützung für mehrere Versionen von Python miserabel und wird zunehmend schlechter. Ich würde empfehlen, dass Sie Homebrew nicht verwenden, um Python überhaupt zu installieren. Python.org bietet macOS-Installationspakete für verschiedene Versionen von Python, die nebeneinander installiert werden können (und bei Bedarf neben einer Homebrew Python-Installation). Wenn Sie diese Pakete verwenden oder ein Tool wie pyenv verwenden , sparen Sie sich auf lange Sicht viel Kummer.
Daniel Pryden

Antworten:


255

Kurze Antwort

Um eine Neuinstallation von Python 3.6.5 durchzuführen, verwenden Sie:

brew unlink python # ONLY if you have installed (with brew) another version of python 3
brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

Wenn Sie eine zuvor installierte Version wiederherstellen möchten, gehen Sie wie folgt vor:

brew info python           # To see what you have previously installed
brew switch python 3.x.x_x # Ex. 3.6.5_1

Lange Antwort

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

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

Standardmäßig können Sie mit diesen Formeln die neueste Version der entsprechenden Hauptversion von Python installieren. Sie können eine Nebenversion wie 3.6 also 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 für das letzte Commit der Formel (python.rb) für die gewünschte Version. Sie finden die Commint-ID in der Historie für homebrew-core / Formula / python.rb

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) Repositorys Python 3.7 veröffentlicht haben, senden sie nur Aktualisierungen des Rezepts von Python 3.7.

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

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


2
Wie wirkt sich dies auf Pakete in Homebrew aus oder interagiert mit diesen, die auf dem Standard-Python3-Interpreter basieren?
Telemachos

1
In jedem Fall sucht eine Python-abhängige Anwendung (mit oder ohne Brew installiert) nach einer ausführbaren Python3-Datei im Anwendungspfad, und Python3 zeigt auf Python3.6. Daher ist Ihr Standard-Python 3 3.6 (wenn Sie das obige Beispiel verwenden) und das sollte ausreichen. Python 3.7 ist so neu; Ich bezweifle, dass es eine Anwendung gibt, die explizit Python 3.7 erfordert. Ebenso kenne ich keine Anwendung, die nur mit Python 3.6 funktioniert. Mit anderen Worten. Es wird dir gut gehen :)
ePi272314

2
Ich habe 3.7 installiert und diesen Fehler erhalten: Error: python 3.7.0 is already installed To install 3.6.5_1, first run Brew Unlink Python`` bei Verwendung der 'kurzen Antwort'.
Wuliwong

2
Vielen Dank, dass Sie den direkten Commit-Link für 3.6.5 bereitgestellt haben. Du hast mich aus einer hoffnungslosen Situation gerettet.
Tsalaroth

4
Ich weiß, dass dies etwas älter ist, aber ich habe Mühe herauszufinden, wie Sie den Link zur Formel erhalten haben. Die aktuelle Version von 3.6 ist 3.6.7. Gibt es einen einfachen Ansatz, um diese Formel zu finden?
Diek

32

Als Update dabei

brew unlink python # If you have installed (with brew) another version of python
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

Sie können begegnen

Error: python contains a recursive dependency on itself:
  python depends on sphinx-doc
  sphinx-doc depends on python

Um dies zu umgehen, fügen Sie das --ignore-dependenciesArgument zur Brauinstallation hinzu.

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

1
und dann wirst du einen Alptraum mit Abhängigkeit Hölle hat ... wie discourse.brew.sh/t/brew-install-python3-fails/1756/7
confiq

4
das hat bei mir zuerst nicht funktioniert; Im Wesentlichen musste dies getan werden: Brew Install --debug --ignore-dependencies raw.githubusercontent.com/Homebrew/homebrew-core/… und wenn es in make html fehlschlägt, ignorieren Sie einfach den Fehler, indem Sie 2) auswählen. Der HTML / Docs-Fehler wird mich wahrscheinlich später beißen, aber im Moment funktioniert es gut: Achselzucken:
Bohnen

19

Zuerst habe ich Python 3.7 installiert

brew install python3
brew unlink python

dann habe ich python 3.6.5 über den obigen link installiert

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

Danach rannte ich brew link --overwrite python. Jetzt habe ich alle Pythons im System, um die virtuellen Umgebungen zu erstellen.

mian@tdowrick2~ $ python --version
Python 2.7.10
mian@tdowrick2~ $ python3.7 --version
Python 3.7.1
mian@tdowrick2~ $ python3.6 --version
Python 3.6.5

So erstellen Sie eine virtuelle Python 3.7-Umgebung

mian@tdowrick2~ $ virtualenv -p python3.7 env
Already using interpreter /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.7'
New python executable in /Users/mian/env/bin/python3.7
Also creating executable in /Users/mian/env/bin/python
Installing setuptools, pip, wheel...
done.
mian@tdowrick2~ $ source env/bin/activate
(env) mian@tdowrick2~ $ python --version
Python 3.7.1
(env) mian@tdowrick2~ $ deactivate

So erstellen Sie eine virtuelle Python 3.6-Umgebung

mian@tdowrick2~ $ virtualenv -p python3.6 env
Running virtualenv with interpreter /usr/local/bin/python3.6
Using base prefix '/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/mian/env/bin/python3.6
Not overwriting existing python script /Users/mian/env/bin/python (you must use /Users/mian/env/bin/python3.6)
Installing setuptools, pip, wheel...
done.
mian@tdowrick2~ $ source env/bin/activate
(env) mian@tdowrick2~ $ python --version
Python 3.6.5
(env) mian@tdowrick2~ $ 

1
Während dies so aussieht, als wäre es großartig, funktioniert es nicht mehr, aber das Ergebnis ist:python -V && python3.7 -V && python3 -V && python3.6 -V Python 2.7.15 Python 3.7.3 Python 3.7.3 zsh: command not found: python3.6
Wafer

1
Schauen Sie sich meine Antwort genau an, für 3.6 müssen Sie python3.6 -V schreiben. Sie haben python3 -Vzweimal getan, deshalb werden Sie 3.7.3zweimal und vermisst3.6
Mian Asbat Ahmad

1
Für mich versteckt sich das python3.6unter /usr/local/Cellar/python/3.6.5_1/bin. Sobald ich einen Link erstellt habe, funktioniert es wie Sie sagen. Dieses Python-Selbstverwaltungssystem scheint ein Rube-Goldberg-Fraktal von einer Million Programmierern zu sein, die durch Brownsche Bewegung codieren.
Eric Leschinski

11

Ich habe alle obigen Antworten versucht, um Python 3.4.4 zu installieren. Die Installation von Python hat funktioniert, aber PIP wurde nicht installiert und ich konnte nichts tun, damit es funktioniert. Ich habe Mac OSX Mojave verwendet, was einige Probleme mit zlib verursacht, openssl.

Was nicht zu tun ist:

  • Vermeiden Sie die Verwendung von Homebrew für frühere Versionen mit der Formel Python oder Python3 .
  • Versuchen Sie nicht, Python zu kompilieren

Lösung:

  1. Laden Sie das MacOS 64-Bit-Installationsprogramm oder das MacOS 64-Bit / 32-Bit-Installationsprogramm herunter : https://www.python.org/downloads/release/python-365/
  2. Im vorherigen Schritt wird Python 3.6.5 heruntergeladen . Wenn Sie beispielsweise Python 3.4.4 herunterladen möchten , ersetzen Sie in der obigen URL python-365 durch python-344
  3. Download Klicken Sie auf die Datei, die Sie heruntergeladen haben. Ein GUI-Installationsprogramm wird geöffnet
  4. Wenn Sie Python-365 nach der Installation heruntergeladen haben , um diese Version von Python zu starten, geben Sie Ihr Terminal python365 ein . Das Gleiche gilt für pip, es ist pip365

ps: Sie müssen Ihre andere Python-Version nicht auf Ihrem System deinstallieren.


Bearbeiten:


Ich habe eine viel, viel bessere Lösung gefunden, die unter MacOSX, Windows, Linux usw. funktioniert.

  1. Es spielt keine Rolle, ob Sie Python bereits installiert haben oder nicht.
  2. Laden Sie Anaconda herunter
  3. Einmal installiert, im Terminaltyp: conda init
  4. Erstellen Sie im Terminal eine virtuelle Umgebung mit einer beliebigen Python-Version. Beispiel: 3.4.4:conda create -n [NameOfYour VirtualEnvironment] python=3.4.4
  5. Anschließend können Sie im Terminal die gesamte virtuelle Umgebung überprüfen, die Sie mit dem folgenden Befehl erstellt haben: conda info --envs
  6. Aktivieren Sie dann im Terminal die virtuelle Umgebung Ihrer Wahl mit: conda activate [The name of your virtual environment that was shown with the command at step 5]

9

Ich habe alles versucht, konnte es aber nicht zum Laufen bringen. Endlich habe ich es benutzt pyenvund es hat direkt wie ein Zauber funktioniert.

Nach der homebrewInstallation kann juste Folgendes tun:

brew install pyenv
pyenv install 3.6.5

So verwalten Sie virtuelle Umgebungen:

brew install pyenv-virtualenv
pyenv virtualenv 3.6.5 env_name

Weitere Informationen finden Sie unter pyenv und pyenv-virtualenv .

EDIT (2019/03/19)

Ich habe festgestellt, dass die Verwendung des pyenv-Installationsprogramms einfacher als bei homebrew ist, um pyenv und pyenv-virtualenv direkt zu installieren:

curl https://pyenv.run | bash

So verwalten Sie die Python-Version entweder global:

pyenv global 3.6.5

oder lokal in einem bestimmten Verzeichnis:

pyenv local 3.6.5

Dies beantwortet die Frage eigentlich nicht direkt, sondern umgeht sie durch einen virtualenvAnsatz.
Javadba

1
eigentlich ist die virtualenv nicht notwendig. pyenvMit dieser Funktion können Sie Python-Versionen verwalten, ohne ein venv verwenden zu müssen
ClementWalter

5

Für den Fall, dass jemand ein Pip-Problem wie unten hat

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

Die Hauptursache ist openssl 1.1 unterstützt Python 3.6 nicht mehr. Sie müssen also die alte Version von openssl 1.0 installieren

Hier ist die Lösung:

brew uninstall --ignore-dependencies openssl
brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

1

Um dies zu lösen homebrew, können Sie homebrew-coredie HOMEBREW_NO_AUTO_UPDATEVariable vorübergehend zurückdatieren und so einstellen , dass sie an Ort und Stelle bleibt :

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

Ich empfehle nicht, den Homebrew-Core dauerhaft zurückzudatieren, da Sie Sicherheitspatches verpassen, aber es ist zu Testzwecken nützlich.

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

brew extract python tap_owner/tap_name --version=3.6.5

0

Der einfachste Weg für mich war die Installation von Anaconda: https://docs.anaconda.com/anaconda/install/

Dort kann ich beliebig viele Umgebungen mit unterschiedlichen Python-Versionen erstellen und mit einem Mausklick zwischen ihnen wechseln. Einfacher geht es nicht.

Befolgen Sie zum Installieren verschiedener Python-Versionen einfach die folgenden Anweisungen: https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html

Eine neue Entwicklungsumgebung mit einer anderen Python-Version wurde innerhalb von 2 Minuten erstellt. Und in Zukunft kann ich leicht hin und her wechseln.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.