質問

What's happening, here?!

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

I stumbled upon this, trying to debug one of my Python scripts, which uses a

#! /usr/bin/env python

first line. And I don't understand how it's possible.

Thanks! -db

I did just notice that '~/.local/bin/python' is a link, not an executable. Would that break the '/usr/bin/env ...' flow somehow?

Perhaps, this is a more succinct way to express the fundamental puzzle?:

$ env python -V
Python 2.4.3

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

It just keeps getting curioser and curioser:

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

$ python -c 'import sys; print sys.executable'
/usr/bin/python
役に立ちましたか?

解決

Most likely what's happening is you don't have your PATH variable exported to the environment. In that case, /usr/bin/env won't have a PATH set, and its execvp call will end up searching a small set of default directories (which typically includes /usr/bin, naturally).

To see this (in 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

So, in summary, make sure to export PATH somewhere in your shell dotfiles.

他のヒント

python seems to be an alias in your shell. Unalias it

unalias python

and try again.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top