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

8 投票
2 回答
3809 浏览
提问于 2025-04-18 00:03

这到底是怎么回事呢?

$ /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

看起来你的命令行里把 python 当成了一个 别名。你需要把它取消掉。

unalias python

然后再试一次。

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

总之,确保在你的 shell 配置文件中有 export PATH 这一行。

撰写回答