为什么OSX没有运行python我得到的python

时间:2016-11-03 12:36:26

标签: python macos

我有一台运行OSX Yosemite的机器(它已经通过几个版本的OSX,这可能会有所不同)。

我注意到python是否可以导入库,这取决于脚本是否直接运行,即

./Myscript.py

或者通过明确调用python

python Myscript.py

现在,如果我输入

$whereis python
/usr/bin/python

我脚本中的shebang线是

#!/usr/bin/python

所以我假设在两种情况下都运行相同版本的python。

但经过调查我发现

$python --version
Python 2.7.6
$/usr/bin/python --version
Python 2.7.10

所以看起来正在执行的python不是我在做whereis时得到的那个

任何人都可以对此有所了解,并澄清如何解决这个问题?我真的希望在这两种情况下运行2.7.10,因为现在当我安装库时它们进入2.7.6,但是当我运行脚本时,它们运行2.7.10并且看不到库。

由于

乔恩

1 个答案:

答案 0 :(得分:4)

请勿使用whereis,该命令会忽略您的PATH环境变量。从联机帮助页:

  

whereis实用程序会检查指定程序的 标准二进制目录 ,并打印出找到的任何路径。

强调我的。

您有一个PATH环境变量,其中包含一个“非标准”二进制目录。使用which查找python的来源:

$ which python

which为您提供当前shell配置的实际使用的二进制文件

  

which实用程序获取命令名列表,并搜索实际调用这些命令时将运行的每个可执行文件 的路径。 < / p>

您可以使用which -a查找命令的所有可能完成情况:

$ which -a python

另请参阅超级用户“whereis” and “which” return different paths in Mac OS X

演示:

$ PATH=/opt/homebrew/bin:$PATH whereis python
/usr/bin/python
$ PATH=/opt/homebrew/bin:$PATH which -a python
/opt/homebrew/bin/python
/usr/bin/python

即使PATH 明确指向我的自制目录,whereis也会忽略它。 which找到它并首先列出它(-a参数使它寻找更多选项)。