Es wurde eine falsche Python-Version mit korrektem $ PATH in ZSH zurückgegeben

717
Alex Starbuck

Mit meiner Umgebung ist etwas sehr Falsches passiert. Während ich versuche zu lernen, habe ich mich entschlossen, Mac OSX El Capitan auf meinem Macbook Pro neu zu installieren und alles von Grund auf zu installieren und zu konfigurieren. Shell, die ich verwende, ist ZSH und ich habe es ein bisschen 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 ~ ❯ 

Der folgende Screenshot zeigt deutlich, dass zwei Python2s installiert sind /usr/binund ein Homebrewed Python3 /usr/local/bin.

Terminal screenshot of Python2 and Python3 paths

Hier ist das Ergebnis von printenv(nur Einträge, die sich auf PATH und SHELL beziehen):

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 

Danke vielmals!

0
Keiner von diesen wird buchstäblich "Python" genannt. Dies ist der Befehl, den Sie eingeben. Was bekommen Sie mit "Typ Python"? tripleee vor 6 Jahren 0
@tripleee Hey thx für die schnelle Antwort. Ich bekomme diese `Python ist / usr / bin / python` Alex Starbuck vor 6 Jahren 0
Es ist nicht ganz klar, warum Sie denken, dass dieses Ergebnis "falsch" ist. tripleee vor 6 Jahren 1
Ich denke, es ist falsch, weil ich mein `$ PATH` in der` .zshrc`-Datei geändert habe, um `PATH = / usr / local / bin: / usr / bin: / usr / local / sbin: / usr / sbin` zu exportieren das "welche Python" sollte jetzt Python 3xx zurückgeben Alex Starbuck vor 6 Jahren 0
Es sollte nicht; Nur "welche Python3.xx" könnte dieses Ergebnis möglicherweise zurückgeben. tripleee vor 6 Jahren 0

1 Antwort auf die Frage

0
tripleee

Nur genau benannte Binärdateien pythonwerden pythonbei der Eingabe an der Shell-Eingabeaufforderung berücksichtigt .

Wenn Sie dies pythonausführen möchten, können Sie auf python3einfache Weise eine Funktion oder einen Alias ​​in Ihren persönlichen Shell-Startdateien festlegen.

Sie dürfen sich keinesfalls auf das pythongesamte python3System beziehen, da dadurch einige Betriebssystem- und Drittanbieter-Tools, die pythonPython-Version 2 sein müssen, beschädigt werden können. Beide Sprachen sind miteinander inkompatible Sprachen (oder Dialekte, wenn Sie dies vorziehen).

Um zu überprüfen, was hier passiert, commanddurchläuft die Shell bei der Eingabe an der Eingabeaufforderung die Verzeichnisse in Ihrem PATHOrdner und sucht nach einer ausführbaren Datei, die commandin jeder Datei genau benannt ist, bis sie eine findet oder keine Suchanfragen mehr vorhanden sind. Es werden einfach alle Dateien mit anderen Namen ignoriert, selbst wenn sie ähnlich wären, wie xcommandoder commandanteoder command3.xx. Wenn Sie einen Alias ​​oder eine Funktion haben, wird dies stattdessen verwendet. Sie PATHwerden jedoch möglicherweise nach weiteren Befehlen gefragt, die von Ihrem Alias ​​oder Ihrer Funktion aufgerufen werden.

Ich verstehe diesen Teil, was ich jedoch nicht verstehe, ist: Warum gibt "which python" ein System zurück, obwohl ich die $ PATH-Variable in meiner .zshrc-Datei geändert habe? Warum ist der Eintrag "PATH" in der Ausgabe von "printenv" auf diesen lächerlich langen Pfad eingestellt, anstatt auf den Pfad, den ich in .zshrc gesetzt habe? Vielen Dank! Alex Starbuck vor 6 Jahren 0
Möglicherweise ändern andere Teile Ihrer `zsh'-Startdateien den Pfad mit etwas wie PATH = $ HOME / bin: PATH. Es sollte natürlich nur einmal notwendig sein. Dies hat aber hier keine direkte Bedeutung und wird in Ihrer eigentlichen Frage überhaupt nicht erwähnt. tripleee vor 6 Jahren 0