`which python` указывает на нужный мне питон, но` python` запускает неправильную версию

2131
tramdas

Я хочу использовать python24, предоставляемый портами, поэтому я установил его и python_select -sпоказывает, что нужная версия действительно выбрана. Бег which pythonдает /opt/local/bin/python, а бег /opt/local/bin/pythonдает мне ту версию, которую я хочу. Однако когда я запускаю pythonиз оболочки, я получаю /usr/bin/pythonверсию вместо. У меня нет псевдонима Python.

Вот ситуация в двух словах:

  1. Я считаю, что путь установлен разумно, и, which pythonкажется, подтверждает это.
  2. alias возвращает только 1 запись, что с этим не связано.

Тем не менее, запуск pythonиз оболочки bash дает мне неправильный питон!

Я вроде как в тупик! Что я пропускаю?

7
Вы проверили свой путь, чтобы увидеть, что на первом месте: / usr / bin или / opt / local / bin? Jeremy L 14 лет назад 0
да, путь был в порядке, как описано ниже, дело было в bash, имеющем устаревшую информацию; хеш-д исправил это. tramdas 14 лет назад 0
В следующий раз попробуйте встроенный Bash `type -a` вместо внешнего` which` (вам все равно нужно будет делать `hash`) Dennis Williamson 14 лет назад 0
Я не уверен, что `type -a` помогает, может быть, вместо этого` hash -t`? tramdas 14 лет назад 0

3 ответа на вопрос

12
Ignacio Vazquez-Abrams

Попробуй hash -d python. Это скажет bash забыть, где он в последний раз видел исполняемый файл python.

Вау, это сработало! Прошло около минуты после того, как я вытер свою установку MacOS и выполнил чистую установку, так как она зависла на 2,5 и не могла исправить! daveangel 12 лет назад 0
3
Vi.

Возможно, вы только что обновили что-то, и ваш экземпляр bash содержит устаревшую информацию об исполняемых файлах. Попробуй exec bash.

Когда я:

  1. Начать qqq( /usr/bin/qqq) с bash.
  2. Добавьте что-то qqqк /usr/local/bin/.
  3. Попробуйте начать qqqснова в том же bash.

Он использует уже просмотренную версию ( /usr/bin/qqq)

Однако, когда я перезапускаю bash, он ищет qqqснова и получает /usr/local/bin/qqq.

Спасибо Ви, то, что ты предложил, тоже сработало, и твое объяснение было полезным. Я никогда не сталкивался с этой проблемой раньше, я всегда думал, что является «авторитетным». tramdas 14 лет назад 0
`which` - это отдельный исполняемый файл, а не внутренняя команда` bash`. Проблема в устаревшем кеше в `bash`. Vi. 14 лет назад 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