我有一台运行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并且看不到库。
由于
乔恩
答案 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
参数使它寻找更多选项)。