Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Python version changes, sys.executable does not

Reply
Thread Tools

Python version changes, sys.executable does not

 
 
Jeffrey Froman
Guest
Posts: n/a
 
      07-19-2007
Hello All,

I have two python versions installed, one in /usr/bin, and one in
/usr/local/bin. However, when invoking python without a full path,
I get the wrong executable with the right sys.executable string!
----------------------------------------------------------------------------
[root@M1 ~]# ls -l /usr/local/bin/python*
-rwxr-xr-x 2 root root 3783810 Jul 19 09:15 /usr/local/bin/python
-rwxr-xr-x 2 root root 3783810 Jul 19 09:15 /usr/local/bin/python2.5
-rwxr-xr-x 1 root root 1281 Jul 19 09:16 /usr/local/bin/python2.5-config
lrwxrwxrwx 1 root root 16 Jul 19 09:16 /usr/local/bin/python-config -> python2.5-config

[root@M1 ~]# ls -l /usr/bin/python*
-rwxr-xr-x 2 root root 5396 May 2 16:28 /usr/bin/python
lrwxrwxrwx 1 root root 6 Jul 18 12:20 /usr/bin/python2 -> python
-rwxr-xr-x 2 root root 5396 May 2 16:28 /usr/bin/python2.3

[root@M1 ~]# which python
/usr/local/bin/python

[root@M1 ~]# /usr/local/bin/python -c "import sys; print sys.executable; print sys.version; set()"
/usr/local/bin/python
2.5 (r25:51908, Jul 19 2007, 09:13:4
[GCC 3.4.6 20060404 (Red Hat 3.4.6-]

[root@M1 ~]# env python -c "import sys; print sys.executable; print sys.version; set()"
/usr/local/bin/python
2.5 (r25:51908, Jul 19 2007, 09:13:4
[GCC 3.4.6 20060404 (Red Hat 3.4.6-]

[root@M1 ~]# python -c "import sys; print sys.executable; print sys.version; set()"
/usr/local/bin/python
2.3.4 (#1, May 2 2007, 19:26:00)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-]
Traceback (most recent call last):
File "<string>", line 1, in ?
NameError: name 'set' is not defined
---------------------------------------------------------------------------------


On a different machine, with same setup (as far as I can tell), I get the expected
results:
---------------------------------------------------------------------------------
[root@M2 ~]# /usr/local/bin/python -c "import sys; print sys.executable; print sys.version; set()"
/usr/local/bin/python
2.5 (r25:51908, Feb 8 2007, 16:29:1
[GCC 3.4.6 20060404 (Red Hat 3.4.6-3)]

[root@M2 ~]# env python -c "import sys; print sys.executable; print sys.version; set()"
/usr/local/bin/python
2.5 (r25:51908, Feb 8 2007, 16:29:1
[GCC 3.4.6 20060404 (Red Hat 3.4.6-3)]

[root@M2 ~]# python -c "import sys; print sys.executable; print sys.version; set()"
/usr/local/bin/python
2.5 (r25:51908, Feb 8 2007, 16:29:1
[GCC 3.4.6 20060404 (Red Hat 3.4.6-3)]
---------------------------------------------------------------------------------

Can anyone tell me what might be causing the erroneous behavior in the first example?

Thanks,
Jeffrey
 
Reply With Quote
 
 
 
 
Jim Langston
Guest
Posts: n/a
 
      07-20-2007
"Jeffrey Froman" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Hello All,
>
> I have two python versions installed, one in /usr/bin, and one in
> /usr/local/bin. However, when invoking python without a full path,
> I get the wrong executable with the right sys.executable string!
> ----------------------------------------------------------------------------
> [root@M1 ~]# ls -l /usr/local/bin/python*
> -rwxr-xr-x 2 root root 3783810 Jul 19 09:15 /usr/local/bin/python
> -rwxr-xr-x 2 root root 3783810 Jul 19 09:15 /usr/local/bin/python2.5
> -rwxr-xr-x 1 root root 1281 Jul 19 09:16
> /usr/local/bin/python2.5-config
> lrwxrwxrwx 1 root root 16 Jul 19 09:16
> /usr/local/bin/python-config -> python2.5-config
>
> [root@M1 ~]# ls -l /usr/bin/python*
> -rwxr-xr-x 2 root root 5396 May 2 16:28 /usr/bin/python
> lrwxrwxrwx 1 root root 6 Jul 18 12:20 /usr/bin/python2 -> python
> -rwxr-xr-x 2 root root 5396 May 2 16:28 /usr/bin/python2.3
>
> [root@M1 ~]# which python
> /usr/local/bin/python
>
> [root@M1 ~]# /usr/local/bin/python -c "import sys; print sys.executable;
> print sys.version; set()"
> /usr/local/bin/python
> 2.5 (r25:51908, Jul 19 2007, 09:13:4
> [GCC 3.4.6 20060404 (Red Hat 3.4.6-]
>
> [root@M1 ~]# env python -c "import sys; print sys.executable; print
> sys.version; set()"
> /usr/local/bin/python
> 2.5 (r25:51908, Jul 19 2007, 09:13:4
> [GCC 3.4.6 20060404 (Red Hat 3.4.6-]
>
> [root@M1 ~]# python -c "import sys; print sys.executable; print
> sys.version; set()"
> /usr/local/bin/python
> 2.3.4 (#1, May 2 2007, 19:26:00)
> [GCC 3.4.6 20060404 (Red Hat 3.4.6-]
> Traceback (most recent call last):
> File "<string>", line 1, in ?
> NameError: name 'set' is not defined
> ---------------------------------------------------------------------------------
>
>
> On a different machine, with same setup (as far as I can tell), I get the
> expected
> results:
> ---------------------------------------------------------------------------------
> [root@M2 ~]# /usr/local/bin/python -c "import sys; print sys.executable;
> print sys.version; set()"
> /usr/local/bin/python
> 2.5 (r25:51908, Feb 8 2007, 16:29:1
> [GCC 3.4.6 20060404 (Red Hat 3.4.6-3)]
>
> [root@M2 ~]# env python -c "import sys; print sys.executable; print
> sys.version; set()"
> /usr/local/bin/python
> 2.5 (r25:51908, Feb 8 2007, 16:29:1
> [GCC 3.4.6 20060404 (Red Hat 3.4.6-3)]
>
> [root@M2 ~]# python -c "import sys; print sys.executable; print
> sys.version; set()"
> /usr/local/bin/python
> 2.5 (r25:51908, Feb 8 2007, 16:29:1
> [GCC 3.4.6 20060404 (Red Hat 3.4.6-3)]
> ---------------------------------------------------------------------------------
>
> Can anyone tell me what might be causing the erroneous behavior in the
> first example?


I think it's because your python directory is in the path before your
python2.5 directory.


 
Reply With Quote
 
 
 
 
Jim Langston
Guest
Posts: n/a
 
      07-20-2007
"Jeffrey Froman" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Hello All,
>
> I have two python versions installed, one in /usr/bin, and one in
> /usr/local/bin. However, when invoking python without a full path,
> I get the wrong executable with the right sys.executable string!
> ----------------------------------------------------------------------------
> [root@M1 ~]# ls -l /usr/local/bin/python*
> -rwxr-xr-x 2 root root 3783810 Jul 19 09:15 /usr/local/bin/python
> -rwxr-xr-x 2 root root 3783810 Jul 19 09:15 /usr/local/bin/python2.5
> -rwxr-xr-x 1 root root 1281 Jul 19 09:16
> /usr/local/bin/python2.5-config
> lrwxrwxrwx 1 root root 16 Jul 19 09:16
> /usr/local/bin/python-config -> python2.5-config
>
> [root@M1 ~]# ls -l /usr/bin/python*
> -rwxr-xr-x 2 root root 5396 May 2 16:28 /usr/bin/python
> lrwxrwxrwx 1 root root 6 Jul 18 12:20 /usr/bin/python2 -> python
> -rwxr-xr-x 2 root root 5396 May 2 16:28 /usr/bin/python2.3
>
> [root@M1 ~]# which python
> /usr/local/bin/python
>
> [root@M1 ~]# /usr/local/bin/python -c "import sys; print sys.executable;
> print sys.version; set()"
> /usr/local/bin/python
> 2.5 (r25:51908, Jul 19 2007, 09:13:4
> [GCC 3.4.6 20060404 (Red Hat 3.4.6-]
>
> [root@M1 ~]# env python -c "import sys; print sys.executable; print
> sys.version; set()"
> /usr/local/bin/python
> 2.5 (r25:51908, Jul 19 2007, 09:13:4
> [GCC 3.4.6 20060404 (Red Hat 3.4.6-]
>
> [root@M1 ~]# python -c "import sys; print sys.executable; print
> sys.version; set()"
> /usr/local/bin/python
> 2.3.4 (#1, May 2 2007, 19:26:00)
> [GCC 3.4.6 20060404 (Red Hat 3.4.6-]
> Traceback (most recent call last):
> File "<string>", line 1, in ?
> NameError: name 'set' is not defined
> ---------------------------------------------------------------------------------
>
>
> On a different machine, with same setup (as far as I can tell), I get the
> expected
> results:
> ---------------------------------------------------------------------------------
> [root@M2 ~]# /usr/local/bin/python -c "import sys; print sys.executable;
> print sys.version; set()"
> /usr/local/bin/python
> 2.5 (r25:51908, Feb 8 2007, 16:29:1
> [GCC 3.4.6 20060404 (Red Hat 3.4.6-3)]
>
> [root@M2 ~]# env python -c "import sys; print sys.executable; print
> sys.version; set()"
> /usr/local/bin/python
> 2.5 (r25:51908, Feb 8 2007, 16:29:1
> [GCC 3.4.6 20060404 (Red Hat 3.4.6-3)]
>
> [root@M2 ~]# python -c "import sys; print sys.executable; print
> sys.version; set()"
> /usr/local/bin/python
> 2.5 (r25:51908, Feb 8 2007, 16:29:1
> [GCC 3.4.6 20060404 (Red Hat 3.4.6-3)]
> ---------------------------------------------------------------------------------
>
> Can anyone tell me what might be causing the erroneous behavior in the
> first example?


er, of course I meant python2.3 before python2.5


 
Reply With Quote
 
Jeffrey Froman
Guest
Posts: n/a
 
      07-22-2007
Jim Langston wrote:

> I think it's because your python directory is in the path before your
> python2.5 directory.


Thanks for the tip. In fact, /usr/local/bin/python (2.5) is on my PATH
before /usr/bin/python (2.3).

I did find the problem however -- it turns out that caching the executable
path is a feature of the bash shell, possibly a buggy one. After installing
the new executable in /usr/local/bin, bash claimed to be running that
executable, but was actually invoking the cached "python"
at /usr/bin/python.

What sorted out the confusion for me was when someone demonstrated to me how
sys.executable could be fooled:

$ exec -a /usr/bin/foobar python
Python 2.5.1 (r251:54863, May 4 2007, 16:52:23)
[GCC 4.1.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.executable

'/usr/bin/foobar'

To remove the cached version, I ran:
$ hash -d python

After which, running "python" invoked a properly named /usr/local/bin/python
as expected.


Thanks,
Jeffrey
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Python Packages : A loomingproblem? packages might no longer work? (well not on your platform or python version anyway) David Lyon Python 19 04-23-2009 11:10 PM
When does python 3.1$B!$(B 3.2 version out$B!)(B Python 2 01-07-2009 06:44 PM
Re: Where to get stand alone Dot Net Framework version 1.1, version2.0, version 3.0, version 3.5, version 2.0 SP1, version 3.0 SP1 ? MowGreen [MVP] ASP .Net 5 02-09-2008 01:55 AM
Re: Where to get stand alone Dot Net Framework version 1.1, version 2.0, version 3.0, version 3.5, version 2.0 SP1, version 3.0 SP1 ? PA Bear [MS MVP] ASP .Net 0 02-05-2008 03:28 AM
Re: Where to get stand alone Dot Net Framework version 1.1, version 2.0, version 3.0, version 3.5, version 2.0 SP1, version 3.0 SP1 ? V Green ASP .Net 0 02-05-2008 02:45 AM



Advertisments