Why does my path not default to using Python 2.7 instead of 2.6?

1

I am using Google App Engine but starting programs from its interface is not working. The logs in GAE indicate it is trying to use Python 2.6 and it needs 2.7 so it fails to run.

I have used Python 2.7 before and when I type python from any path in a terminal, the 2.7 banner comes up.

However, if I invoke /usr/bin/python I get the 2.6 banner.

Even if I am in /usr/bin and I type python I get the 2.7 banner. My env variables mention plenty of stuff about 2.7.

I tried changing the path to python in GAE from /usr/bin/python to python which did not work.

What am I missing?

EDIT:

It seems that user related path is superseded by system wide path (guessing).
/etc/path contains only /usr/bin, /bin, /usr/sbin, /sbin, /usr/local/bin (in that order)

my path under env contains much more things that have been added over time, but it seems that the very first thing that is looked at is /etc/path, which is taking precedence over /usr/bin/env

EDIT:

The root of the problem turned out to be OSX relying on outdated Python libraries that don't install to the same place as new Python installers. It is easy to mess up your system messing with the old Python 2.5 and 2.6 stuff on OSX Snow Leopard. I ended up linking /usr/bin/python to /Library/Frameworks/Python.framework/Versions/2.7/bin/python. This works so far but I could see this messing something up, so read more before you use this.

fightermagethief

Posted 2013-12-13T21:00:57.367

Reputation: 843

1What does this have to do with OS X? In any case, what did you change when you tried to fix it? What does an ls -l /usr/bin/python show? How about which python? – ernie – 2013-12-13T21:08:21.457

@ernie: probably not much to do with osx now but when it was originally installed it was without installer and took quite a bit more effort to get working. Which python = /Library/Frameworks/Python.framework/Versions/2.7/bin/python and ls -l = -rwxr-xr-x 2 root wheel 86000 – fightermagethief – 2013-12-13T21:18:15.967

1@bboyreason ls -l /usr/bin/python should output something like -rwxr-xr-x 1 root wheel 9 Sep 14 01:15 /usr/bin/python -> python2.7 if it's a symlink, yours is a hardlink(note 2)
also try ls -l $(which python)
– behrooz – 2013-12-13T21:39:51.123

@behrooz that gets lrwxr-xr-x 1 root admin /Library/Frameworks/Python.framework/Versions/2.7/bin/python -> python2 python2 calls 2.7 – fightermagethief – 2013-12-13T22:00:31.583

I tried symlinking /usr/bin/python to python and calling 'python' still brings up 2.7 but now calling '/usr/bin/python' or '/usr/local/bin/python' results in error 'too many levels of symbolic links' – fightermagethief – 2013-12-13T22:07:17.487

2They are symlinked to each other, try reverting what you did. The only thing that may help now is seeing the full PATH that GAE sees, if there is anyway to extract it. – behrooz – 2013-12-13T22:09:16.817

Answers

1

In Linux we have this thing called Alternatives system that handles these situations. I'd check if the python binary is a symlink to another python or not, and change it to the one I want if so.
Also check if your PATH contains ".", and if it does, try removing it.

behrooz

Posted 2013-12-13T21:00:57.367

Reputation: 493

0

I had a similar problem and it was because I had Cygwin in my PATH variable before the Python installation, where a python.exe file is located.

Generally, check whether a python.exe file can be found in directories listed in your PATH variable before your "actual" Python install directory.

Niko

Posted 2013-12-13T21:00:57.367

Reputation: 111