В bash «который» дает неверный путь - версии Python - PullRequest
13 голосов
/ 13 октября 2011

Может кто-нибудь объяснить, как python 2.6 может запускаться по умолчанию на моей машине? Похоже, python указывает на 2,7, поэтому кажется, что which не дает мне правильную информацию.

~> python --version
Python 2.6.5
~> which python
/opt/local/bin/python
~> /opt/local/bin/python --version
Python 2.7.2
~> ls -l /opt/local/bin/python
lrwxr-xr-x  1 root  admin  24 12 Oct 16:02 /opt/local/bin/python -> /opt/local/bin/python2.7

Когда я генерирую ошибку, я вижу, что действительно запускается. Почему это может быть?

~> python -error-making-argument
Unknown option: -e
usage:     /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.

А как мне это исправить?

---- Изменить: ----

Из предложений в комментариях:

~> alias
alias cp='cp -i'
alias gcc='gcc -Wall'
~> type python
python is /opt/local/bin/python

Ответы [ 2 ]

24 голосов
/ 13 октября 2011

Bash использует внутреннюю хеш-таблицу для оптимизации поиска $PATH.Когда вы устанавливаете новую программу с тем же именем, что и существующая программа (python в данном случае) ранее в вашем $PATH, Bash об этом не знает и продолжает использовать старую.Исполняемый файл which выполняет полный поиск $PATH и печатает ожидаемый результат.

Чтобы исправить это, введите команду hash -d python.Это удалит python из хэш-таблицы Bash и заставит его выполнить полный $PATH поиск при следующем вызове.Кроме того, вы также можете запустить hash -r, чтобы полностью очистить хеш-таблицу.

Встроенный 1017 скажет вам, как будет интерпретироваться данная команда.Если он говорит, что команда хэшируется, это означает, что Bash пропустит поиск $PATH исполняемого файла.

0 голосов
/ 13 октября 2011

Я только что проверил мой .bash_profile, и он содержал следующее:

# Setting PATH for MacPython 2.6
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.6/bin:/usr/local/git/bin:${PATH}"
export PATH

Комментирование этого исправило мою проблему.

Если кто-то может сказать мне, почему whichtype все еще дал неправильные ответы, я был бы очень благодарен и поставил бы им галочку!

Спасибо за все ваше руководство!

...