"which python" zeigt auf den gewünschten Python, aber "python" führt die falsche Version aus

2154
tramdas

Ich möchte Python24 verwenden, das von Ports bereitgestellt wird. Ich habe es installiert und python_select -szeigt, dass die gewünschte Version tatsächlich ausgewählt ist. Laufen which pythongibt /opt/local/bin/pythonund Laufen /opt/local/bin/pythongibt mir die Version, die ich will. Wenn ich jedoch pythonvon der Shell aus laufe, bekomme ich /usr/bin/pythonstattdessen die Version. Ich habe keinen Python-Alias.

Hier ist die Situation auf den Punkt gebracht:

  1. Ich glaube, der Weg ist vernünftig angelegt und which pythonscheint dies zu bestätigen.
  2. alias gibt nur 1 Eintrag zurück, was mit diesem nicht zusammenhängt.

Beim Laufen pythonaus der Bash-Shell bekomme ich jedoch den falschen Python!

Ich bin irgendwie verblüfft! Was überblicke ich?

7
Sie haben Ihren Pfad überprüft, um zu sehen, was zuerst kommt: / usr / bin oder / opt / local / bin? Jeremy L vor 14 Jahren 0
yep, der Weg war gut, wie unten beschrieben, es war eine Frage des Schlags mit veralteten Informationen; der Hash -d hat es behoben. tramdas vor 14 Jahren 0
Versuchen Sie das nächste Mal den Bash-Typ "-a" anstelle des externen "which" (Sie müssen noch "Hash" ausführen). Dennis Williamson vor 14 Jahren 0
Ich bin mir nicht sicher, ob "type -a" den Trick macht, vielleicht stattdessen "hash -t"? tramdas vor 14 Jahren 0

3 Antworten auf die Frage

12
Ignacio Vazquez-Abrams

Try hash -d python. This will tell bash to forget where it last saw the python executable.

Wow das hat funktioniert! Es dauerte ungefähr eine Minute, bis meine MacOS-Installation gelöscht wurde und eine saubere Installation durchgeführt wurde, da sie bei 2,5 feststeckte und nicht repariert werden konnte. daveangel vor 12 Jahren 0
3
Vi.

Perhaps you just updated something and your bash instance has stale information about executables. Try exec bash.

When I:

  1. Start qqq (/usr/bin/qqq) from bash.
  2. Add something qqq to /usr/local/bin/.
  3. Try to start qqq again in the same bash.

It uses the already-looked-up version (/usr/bin/qqq)

However when I restart the bash, it looks for qqq again and gets /usr/local/bin/qqq.

Danke Vi, was du vorgeschlagen hast, hat auch funktioniert, und deine Erklärung war hilfreich. Ich bin diesem Problem noch nie begegnet, ich dachte immer, "welches" sei "maßgebend". tramdas vor 14 Jahren 0
"which" ist eine separate ausführbare Datei und kein interner "bash" -Befehl. Das Problem ist ein alter Cache in `bash`. Vi. vor 14 Jahren 0
0
GreenMatt

Another possibility is that the script itself specifies which Python executable to run in the first line of the script. For example, my system has Python 2.6 and 2.7 installed, and if the first line is something like:

#!/usr/bin/Python-2.6.8/bin/python 

then I get Python 2.6, even though 2.7 is the system default.

The usual way to specify the default is:

#!/usr/bin/env python