在bash中,“which”给出了错误的路径-Python版本

2024-05-12 23:51:28 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释一下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

Tags: 机器信息whichbinversionlocalaliascp
2条回答

Bash使用internal hash table优化$PATH查找。当您在前面的$PATH中安装一个与现有程序同名的新程序(在本例中为python)时,Bash并不知道,而是继续使用旧程序。可执行文件which执行完整的$PATH搜索并打印出预期结果。

要解决此问题,请运行命令hash -d python。这将从Bash的哈希表中删除python,并强制它在下次调用时执行完整的$PATH搜索。或者,也可以运行hash -r来完全清除哈希表。

^{} builtin将告诉您如何解释给定的命令。如果命令是散列的,则意味着Bash将跳过对可执行文件的$PATH搜索。

我刚刚检查了我的.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仍然给出了错误的答案,我将非常感激,并将给他们一个复选标记!

谢谢你的指导!

相关问题 更多 >