`哪个python`指向我想要的python,但是`python`运行错误的版本


7

我想使用端口提供的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 shell 运行会给我错误的python!

我有点难过!我在俯视什么?


您确实检查了路径以查看哪个先出现:/ usr / bin或/ opt / local / bin?
Jeremy L

是的,路径很好,如下所述,这是具有过时信息的猛击问题;hash -d修复了它。
tramdas

下次,尝试使用内置的Bash type -a代替外部的Bash which(您仍然需要这样做hash
Dennis Williamson 2010年

我不确定是否type -a可以解决问题,也许可以hash -t吗?
tramdas 2010年

Answers:



3

也许您刚刚更新了一些内容,并且bash实例具有有关可执行文件的过时信息。尝试exec bash

当我:

  1. 从开始qqq/usr/bin/qqqbash
  2. 添加的东西qqq/usr/local/bin/
  3. 尝试以qqq相同的方式重新开始bash

它使用已经查找的版本(/usr/bin/qqq

但是,当我重新启动bash时,它将qqq再次查找并得到/usr/local/bin/qqq


感谢Vi,您的建议也有效,您的解释也很有帮助。我以前从未遇到过这个问题,我一直以为which是“权威”。
tramdas

which是一个单独的可执行文件,而不是bash内部命令。问题是中的缓存过时bash
六。

0

另一种可能性是脚本本身指定了在脚本的第一行中运行哪个Python可执行文件。例如,我的系统安装了Python 2.6和2.7,并且如果第一行是这样的:

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

那么我得到的是Python 2.6,即使系统默认值为2.7。

指定默认值的通常方法是:

#!/usr/bin/env python
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.