Wie setze ich die Standardversion von Python unter OS X auf 3.x?

329

Ich verwende Mountain Lion und die Standardversion von Python ist 2.7. Ich habe Python 3.3 heruntergeladen und möchte es als Standard festlegen.

Zur Zeit:

$ python
    version 2.7.5
$ python3.3
    version 3.3

Wie stelle ich es so ein, dass es bei jedem Start $ python3.3 öffnet?

Marcus
quelle
Mögliches Duplikat, wie man die Standard-Python-Version ändert?
Dheeraj Vepakomma
Sie können die Version von Python mit verwalten pyenv.
Shin Kim

Antworten:

579

Das systemweite Ändern der Standardversion der ausführbaren Python-Datei kann einige Anwendungen beschädigen, die von python2 abhängen.

Sie können jedoch die Befehle in den meisten Shells aliasen, da die Standard-Shells in macOS (bash in 10.14 und darunter; zsh in 10.15) eine ähnliche Syntax aufweisen. Sie könnten den Alias ​​python = 'python3' in Ihre Zeile einfügen ~/.profileund dann ~/.profilein Ihre ~/.bash_profileund / oder Ihre ~/.zsh_profilemit einer Zeile wie der folgenden eingeben :

[ -e ~/.profile ] && . ~/.profile

Auf diese Weise funktioniert Ihr Alias ​​über Shells hinweg.

Damit wird der pythonBefehl jetzt aufgerufen python3. Wenn Sie gelegentlich die "ursprüngliche" Python (die sich auf Python2 bezieht) aufrufen möchten , können Sie diese verwendencommand python , wodurch der Alias ​​unberührt bleibt und in allen Shells funktioniert.

Wenn Sie Dolmetscher häufiger starten (ich auch) , können Sie immer weitere Aliase erstellen, die ebenfalls hinzugefügt werden können, z.

alias 2='python2'
alias 3='python3'

Tipp: Für Skripte anstelle eines Shebangs wie:

#!/usr/bin/env python

verwenden:

#!/usr/bin/env python3

Auf diese Weise verwendet das System python3 zum Ausführen von ausführbaren Python- Dateien .

Santosh Kumar
quelle
2
Sollte dies nicht in ~ / .bash_profile anstelle von ~ / .bash_aliases eingefügt werden?
UnsettlingTrend
4
Das Setzen alias python=python3und Laufen pythonin meinem Terminal auf osx el capitan hat bei mir nicht funktioniert. Es wurde versucht, sowohl ~ / .bash_aliases als auch ~ / .bash_profile zu speichern.
Haymaker87
43
@ Haymaker87 source ~/.bash_profilenach der Bearbeitung der ~/.bash_profileDatei ausführen .
Wei Lu
15
Sie können das gleiche für pip tun:alias pip='pip3.6'
stephen
@ surfer190, das beim Ausführen mit sudo Probleme verursacht, nicht wahr?
Santosh Kumar
141

Sie können es durch symbolischen Link lösen.

unlink /usr/local/bin/python
ln -s /usr/local/bin/python3.3 /usr/local/bin/python
Shin Kim
quelle
23
Dies ist die richtige Antwort (Aliase sind nett, aber nur per Bash zugänglich, wodurch die Anzahl der Anrufe begrenzt wird). Ich würde jedoch unlinkanstelle von verwenden rm, um Symlinks zu entfernen (wenn Sie versehentlich einen abschließenden Schrägstrich hinzufügen, rmkann dies zu schlechten Ergebnissen führen). Alternativ können Sie auch ln -s -f ...den aktuellen Symlink überschreiben.
Chad Befus
2
@ChadBefus Vielen Dank für Ihre Antwort. Ich stimme deiner Meinung zu. Unlink ist sicherer als rm.
Shin Kim
3
Hat es irgendwelche Konsequenzen für Skripte , die erwarten pythonzu sein python2.7?
Anton Tarasenko
18
macOS:unlink: /usr/bin/python: Operation not permitted
MarksCode
4
@MarksCode versuchen Sie einfach, die zweite ursprüngliche Zeile (dh ln -s... mit /local/ ) auszuführen .
EliadL
42

Öffnen Sie die Datei ~ / .bash_profile .

vi ~/.bash_profile

Setzen Sie dann den Alias ​​wie folgt:

alias python='python3'

Speichern Sie nun die Datei und führen Sie die Datei ~ / .bash_profile aus .

source ~/.bash_profile

Glückwunsch !!! Jetzt können Sie python3 verwenden, indem Sie python eingeben .

python --version

Python 3.7.3

Ananta Chandra Das
quelle
Wenn Sie wie ich festgestellt haben, dass das gleiche Problem für pip gilt (dh die pip --version ist immer noch 2.7.x), müssen Sie die gleichen Schritte für pip3 ausführen. vi ~ / .bash_profile, alias pip = 'pip3', source ~ / .bash_profile, pip --version
SnellyBigoda
Muss ich wirklich source ~/.bash_profilejedes Mal , wenn ich mein Terminal wieder öffne? Sobald ich das Terminal schließe und wieder öffne, wird es auf python2 zurückgesetzt.
Ricky Aguilar
21

Gehen Sie zum Terminaltyp:

alias python=python3.x

Dadurch wird Standardpython als python3.x eingerichtet

Aditya
quelle
1
Dies funktionierte für mich, aber mit "alias python = python3"
Discant
Dadurch wird die Python-Version für diese Terminalinstanz vorübergehend festgelegt.
Ashwin R
12

Folgendes hat bei mir funktioniert

cd /usr/local/bin
mv python python.old
ln -s python3 python
Mayank Jain
quelle
10

Ich bin etwas spät dran, aber ich dachte, ich sollte eine aktualisierte Antwort posten, da ich gerade auf dieses Problem gestoßen bin. Bitte beachten Sie, dass dies nur für ein Mac-basiertes Setup gilt (ich habe es nicht mit Windows oder Linux ausprobiert).

Der einfachste Weg, dies zum Laufen zu bringen, ist die Installation von Python über Brew . Wenn Sie kein Gebräu installiert haben, müssen Sie dies zuerst tun. Führen Sie nach der Installation am Terminal die folgenden Schritte aus:

brew install python

Dadurch wird Python 3 installiert. Führen Sie nach der Installation Folgendes aus:

ls -l /usr/local/bin/python*

Sie sehen alle von Brew erstellten Links zu seiner Python-Installation. Es wird ungefähr so ​​aussehen:

lrwxr-xr-x  1 username  admin  36 Oct  1 13:35 /usr/local/bin/python3@ -> ../Cellar/python/3.7.4_1/bin/python3
lrwxr-xr-x  1 username  admin  43 Oct  1 13:35 /usr/local/bin/python3-config@ -> ../Cellar/python/3.7.4_1/bin/python3-config
lrwxr-xr-x  1 username  admin  38 Oct  1 13:35 /usr/local/bin/python3.7@ -> ../Cellar/python/3.7.4_1/bin/python3.7
lrwxr-xr-x  1 username  admin  45 Oct  1 13:35 /usr/local/bin/python3.7-config@ -> ../Cellar/python/3.7.4_1/bin/python3.7-config
lrwxr-xr-x  1 username  admin  39 Oct  1 13:35 /usr/local/bin/python3.7m@ -> ../Cellar/python/3.7.4_1/bin/python3.7m
lrwxr-xr-x  1 username  admin  46 Oct  1 13:35 /usr/local/bin/python3.7m-config@ -> ../Cellar/python/3.7.4_1/bin/python3.7m-config

Die erste Zeile in diesem Beispiel zeigt den python3Symlink. pythonFühren Sie Folgendes aus, um es als Standard- Symlink festzulegen:

ln -s -f /usr/local/bin/python3 /usr/local/bin/python

Einmal eingestellt, können Sie Folgendes tun:

which python

und es sollte zeigen:

/usr/local/bin/python

Sie müssen Ihre aktuelle Terminal-Shell neu laden, damit sie den neuen Symlink in dieser Shell verwendet. Alle neu geöffneten Shell-Sitzungen werden sie jedoch automatisch verwenden (sollten). Um dies zu testen, öffnen Sie eine neue Terminal-Shell und führen Sie Folgendes aus:

python --version
Sknight
quelle
Funktioniert hervorragend ( Referenz )
Nepo Znat
9

Gehen Sie zu 'Anwendungen', geben Sie den Ordner 'Python' ein. Es sollte ein Bash-Skript mit dem Namen 'Update Shell Profile.command' oder ähnlichem vorhanden sein. Führen Sie das Skript aus und es sollte es tun.

Update: Sie sollten es anscheinend nicht aktualisieren: Wie ändere ich die Standard-Python-Version?

CT Zhu
quelle
8

Das hat bei mir funktioniert. Ich habe einen Alias hinzugefügt und mein Terminal neu gestartet :

alias python=/usr/local/bin/python3
toadead
quelle
schön einfach und auf den Punkt. tolle Arbeit
Avshalom
6

Ich glaube, die meisten Leute, die hier gelandet sind, benutzen ZSH durch iterm oder was auch immer, und das bringt Sie zu dieser Antwort .

Sie müssen ~/.zshrcstattdessen Ihre Befehle hinzufügen / ändern .

Herr Crowley
quelle
3

Ich bin nicht sicher, ob dies unter OS X verfügbar ist, aber unter Linux würde ich den moduleBefehl verwenden. Siehe hier .

Richten Sie die Moduldatei korrekt ein und fügen Sie Ihrer RC-Datei so etwas hinzu (z. B. ~ / .bashrc):

module load python3.3

Auf diese Weise werden Ihre Pfade bei der Anmeldung nach Bedarf umgeschaltet, ohne dass dies Auswirkungen auf die Systemstandards hat.

Vorticity
quelle
3

Ich denke, wenn Sie Python installieren, werden Exportpfadanweisungen in Ihre ~ / .bash_profile-Datei eingefügt. Wenn Sie Python 2 nicht mehr verwenden möchten, können Sie diese Anweisung einfach von dort entfernen. Alias ​​wie oben angegeben ist auch eine großartige Möglichkeit, dies zu tun.

So entfernen Sie die Referenz aus ~ / .bash_profile - vim ./.bash_profile - entfernen Sie die Referenz (AKA etwa: export PATH = "/ Users / bla / anaconda: $ PATH") - speichern und beenden - source ./ .bash_profile, um die Änderungen zu speichern

doubleOK
quelle
Es passiert nicht
co2f2e
3
$ sudo ln -s -f $(which python3) $(which python)

erledigt.

oori
quelle
1

Wenn Sie a verwenden virtualenvwrapper, können Sie es einfach mit suchen, es which virtualenvwrapper.shdann mit vimeinem anderen Editor öffnen und dann Folgendes ändern

# Locate the global Python where virtualenvwrapper is installed.
if [ "${VIRTUALENVWRAPPER_PYTHON:-}" = "" ]
then
    VIRTUALENVWRAPPER_PYTHON="$(command \which python)"
fi

Ändern Sie die Zeile VIRTUALENVWRAPPER_PYTHON="$(command \which python)"in VIRTUALENVWRAPPER_PYTHON="$(command \which python3)".

Esir Kings
quelle
1

Für mich bestand die Lösung darin, PyCharm zu verwenden und die Standard-Python-Version auf die zu setzen, mit der ich arbeiten muss.

Installieren Sie PyCharm und gehen Sie zu Datei ==> Einstellungen für neues Projekt. Wählen Sie dann den gewünschten Interpreter für Ihre Projekte aus, in diesem Fall Python 3.3

Chama
quelle
1

Wenn Sie Macports verwenden, müssen Sie nicht mit Aliasnamen oder Umgebungsvariablen spielen. Verwenden Sie einfach die Methode, die Macports bereits anbietet und die in diesen Fragen und Antworten erläutert wird:

Gewusst wie: Macports wählen Python

TL; DR:

sudo port select --set python python27
alanwaring
quelle
1

Wenn Sie Macports verwenden, ist dies einfacher:

Lauf:

port install python37

Setzen Sie nach der Installation die Standardeinstellung:

sudo port select --set python python37

sudo port select --set python3 python37

Starten Sie Ihr Cmd-Fenster neu, fertig.

Clark Also
quelle
1

Nun ... es ist ein bisschen alt. Aber verdient immer noch eine gute Antwort.

Und das Gute ist, dass Sie den Standard-Python auf dem Mac nicht berühren möchten.

Installieren Sie jede benötigte Python-Version über Homebrew oder was auch immer und verwenden Sie sie in virtualenv. Virtualenv wird oft als etwas Misthaftes angesehen, aber es ist immer noch viel besser, als die Python-Version systemweit zu ändern (macOS schützt sich wahrscheinlich vor solchen Aktionen) oder benutzerweit, bash-weit ... was auch immer. Vergessen Sie einfach den Standard-Python. Die Verwendung von Spielplätzen wie venv ist das, wofür Ihr Betriebssystem am meisten, sehr dankbar ist.

Der Fall ist zum Beispiel, dass viele moderne Linux-Distributionen Python2 sofort installieren und nur Python3 im System belassen. Aber jedes Mal, wenn Sie versuchen, etwas Altes mit Python2 als Abhängigkeit zu installieren, hoffen Sie, dass Sie verstehen, was ich meine. Einem guten Entwickler ist das egal. Gute Entwickler erstellen saubere Spielplätze mit der gewünschten Python-Version.

Tor_Gash
quelle
0

Mac-Benutzer müssen lediglich den folgenden Code auf dem Terminal ausführen

brew switch python 3.x.x

3.xx sollte die neue Python-Version sein.

Dadurch werden alle Systemverknüpfungen aktualisiert.

Dilshan
quelle
0

Vorschläge für den Alias ​​Python zu Python3 verursachen Probleme mit virtuellen Umgebungen, in denen die Version von Python festgelegt ist (z. B. pyenv). Mit pyenv können Sie die Version global wie folgt einstellen:

pyenv global 3.8.2

Anschließend können Sie in einem bestimmten Projekt eine Python-Versionsdatei erstellen, in der sich die Python-Version befindet:

pyenv local 2.7.1

Dies ist meiner Meinung nach der beste Weg, um mehrere Versionen von Python auf einem System zu verwalten.

Jacob
quelle