Falsche Python-Version zurückgegeben, mit korrektem $PATH in ZSH festgelegt

Falsche Python-Version zurückgegeben, mit korrektem $PATH in ZSH festgelegt

mit meiner Umgebung stimmt etwas nicht. Da ich versuche, es zu lernen, habe ich beschlossen, Mac OSX El Capitan auf meinem Macbook Pro neu zu installieren und von Grund auf neu zu installieren und zu konfigurieren. Die Shell, die ich verwende, ist ZSH und ich habe sie ein wenig mit Oh-My-ZShell konfiguriert.

Mein $PATH und Python:

~ ❯ echo $PATH
/Users/edchigliak/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/edchigliak/bin
~ ❯ python --version
Python 2.7.10
~ ❯

/usr/binDer Screenshot unten zeigt deutlich, dass zwei Python2-Versionen und ein Homebrewed Python3-Version installiert sind /usr/local/bin.

Terminal-Screenshot der Python2- und Python3-Pfade

Hier ist das Ergebnis von printenv(nur Einträge bezüglich PATH und SHELL):

PATH=/Users/edchigliak/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/edchigliak/bin
PWD=/Users/edchigliak
SHELL=/usr/local/bin/zsh
SHLVL=2
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.lRGo5iu4NA/Listeners
TERM=screen-256color
ZSH=/Users/edchigliak/.oh-my-zsh
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
_=/usr/bin/printenv

Erster Eintrag in meinem.zshrc:

export PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/bin 

Vielen Dank!

Antwort1

pythonBei der Eingabe in der Shell-Eingabeaufforderung werden nur Binärdateien mit exaktem Namen berücksichtigt python.

Wenn Sie pythonausführen möchten python3, können Sie dies am einfachsten erreichen, indem Sie in Ihren persönlichen Shell-Startdateien eine Funktion oder einen Alias ​​festlegen.

Sie dürfen auf keinen Fall systemweit pythondarauf hinweisen , da dies einige Betriebssysteme und Tools von Drittanbietern beschädigen würde, für die Python Version 2 erforderlich ist. Die beiden sind miteinander inkompatible Sprachen (oder Dialekte, wenn Sie so wollen).python3python

Um zu überprüfen, was hier passiert: Wenn Sie commandin die Eingabeaufforderung tippen, durchläuft die Shell die Verzeichnisse in Ihrem PATHund sucht commandin jedem nach einer ausführbaren Datei mit genau demselben Namen, bis sie eine findet oder keine Orte mehr zum Suchen hat. Sie ignoriert einfach alle Dateien mit anderen Namen, selbst wenn sie ähnlich sind, wie xcommandoder commandanteoder command3.xx. Wenn Sie einen Alias ​​oder eine Funktion haben, wird diese stattdessen verwendet, obwohl Ihr PATHmöglicherweise dann konsultiert wird, um andere Befehle zu finden, die von Ihrem Alias ​​oder Ihrer Funktion aufgerufen werden.

Antwort2

Die Shell durchsucht PATH nachGenaue Übereinstimmungen. Wenn Sie eingeben python, wird versucht, eine ausführbare Datei zu finden, die mit übereinstimmt ^python$; ^python...$ist nicht dasselbe.

In Ihrem Fall könnte es sein, dass in /usr/local/bin kein Python vorhanden ist oder dass ein Berechtigungsproblem vorliegt, weshalb es übersprungen wird.

1) Wenn kein pythonin vorhanden ist /usr/local/bin:

Sie können sudo ln -s /usr/local/bin/python3.6 /usr/local/bin/pythoneinen Softlink erstellen, der pythonauf den gewünschten Python-Interpreter verweist. Da /usr/local/bin zuerst nach Ihrem PATH durchsucht wird, sollte die Shell diesen Link jetzt finden.

2) Wenn die Datei existiert, /usr/local/binaber nicht hatausführenErlaubnis, versuch es sudo chmod a+x /usr/local/bin/python.

Mir fallen momentan keine anderen Probleme ein.

verwandte Informationen