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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With