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

dba*_*nas 7 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
Run Code Online (Sandbox Code Playgroud)

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

#! /usr/bin/env python

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

谢谢!-D b

我注意到'〜/ .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)
Run Code Online (Sandbox Code Playgroud)

它只是不断获得好奇心和好奇心:

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

$ python -c 'import sys; print sys.executable'
/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

jjl*_*lin 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
Run Code Online (Sandbox Code Playgroud)

因此,总而言之,请确保export PATHshell 点文件中的某个位置。