“shebang / usr / bin / env python”调用错误的Python解释器

时间:2014-03-26 19:58:43

标签: python bash shebang

发生了什么事,在这里?!

$ /usr/bin/env which python
/home/dbanas/.local/bin/python

$ /home/dbanas/.local/bin/python -V
Python 2.7.3 -- EPD_free 7.3-2 (64-bit)

$ /usr/bin/env python -V
Python 2.4.3

我偶然发现了这一点,试图调试我的一个Python脚本,它使用了

#! /usr/bin/env python

第一行。我不明白它是如何可能的。

谢谢! -db

我注意到'〜/ .local / bin / python'是一个链接,而不是一个可执行文件。那会以某种方式打破'/ usr / bin / env ...'流吗?

也许,这是表达基本难题的更简洁方式?:

$ env python -V
Python 2.4.3

$ python -V
Python 2.7.3 -- EPD_free 7.3-2 (64-bit)

它不断得到好奇心和好奇心:

$ which python
/home/dbanas/.local/bin/python

$ python -c 'import sys; print sys.executable'
/usr/bin/python

2 个答案:

答案 0 :(得分:4)

最有可能发生的事情是您没有将PATH变量导出到环境中。在这种情况下,/usr/bin/env不会设置PATH,其execvp调用将最终搜索一小组默认目录(通常包含/usr/bin ,自然而然。)

要查看此内容(在bash中):

$ export PATH
$ declare -p PATH  # verify PATH is exported, denoted by the -x
declare -x PATH="<my usual path, omitted...>"
$ /usr/bin/env python -V  # shows my own python build
Python 2.7.6
$ export -n PATH  # un-export PATH
$ declare -p PATH
declare -- PATH="<my usual path, omitted...>"
$ /usr/bin/env python -V  # shows the system (/usr/bin/python) version
Python 2.6.6

因此,总而言之,请确保{dot}中的export PATH位于其中。

答案 1 :(得分:0)

python似乎是您的shell中的alias。 Unalias it

unalias python

再试一次。