This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: platform.libc_ver() fails on Cygwin
Type: Stage:
Components: Library (Lib) Versions: Python 2.4
process
Status: closed Resolution: wont fix
Dependencies: Superseder:
Assigned To: lemburg Nosy List: lemburg, quiver
Priority: normal Keywords:

Created on 2004-04-02 14:55 by quiver, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (6)
msg20413 - (view) Author: George Yoshida (quiver) (Python committer) Date: 2004-04-02 14:55
>>> import platform
>>> platform.libc_ver()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/lib/python2.3/platform.py", line 134, in libc_ver
    f = open(executable,'rb')
IOError: [Errno 2] No such file or 
directory: '/usr/bin/python'

The problem is that on Cygwin sys.executable 
returns /path/to/python, but since Cygwin is running on 
Windows, sys.executable is a symbolic link 
to /path/to/python.exe.

>>> import os, sys
>>> os.path.exists(sys.executable)
True
>>> os.path.isfile(sys.executable)
True
>>> file(sys.executable)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
IOError: [Errno 2] No such file or 
directory: '/usr/bin/python'
>>> os.path.islink(sys.executable)
True
>>> os.path.realpath(sys.executable)
'/usr/bin/python2.3.exe'
>>> file(sys.executable + '.exe')
<open file '/usr/bin/python.exe', mode 'r' at 0xa100ca0>

Following is the info about the machine I tested:

>>> from platform import *
>>> platform()
'CYGWIN_NT-5.0-1.5.7-0.109-3-2-i686-32bit'
>>> python_compiler()
'GCC 3.3.1 (cygming special)'
>>> python_build()
(1, 'Dec 30 2003 08:29:25')
>>> python_version()
'2.3.3'
>>> uname()
('CYGWIN_NT-5.0', 'my_user_name', '1.5.7
(0.109/3/2)', '2004-01-30 19:32', 'i686', '')
msg20414 - (view) Author: Marc-Andre Lemburg (lemburg) * (Python committer) Date: 2004-04-02 15:59
Logged In: YES 
user_id=38388

Patches are welcome :-)

I don't have cygwin installed, so there's nothing much
I can do about this.
msg20415 - (view) Author: George Yoshida (quiver) (Python committer) Date: 2004-04-03 04:20
Logged In: YES 
user_id=671362

First, I need to correct my previous post. 'symbolic' was 
unrelated.
Python on Cygwin does't like exe files that doesn't end 
with '.exe'.
I think changing fileobject.c to support I/O exe files on 
Cygwin whether it ends with '.exe' or not is the way to go.

Is there anyone who can do that? It's beyoond my skill level.

$ ls -l /usr/bin/python*
lrwxrwxrwx  1 abel  Users    24 Jan  1 01:34 /usr/bin/python -
> python2.3.exe
lrwxrwxrwx  1 abel  Users    24 Jan  1 
01:34 /usr/bin/python.exe -> python2.3.exe
-rwxrwxrwx  1 abel  Users  4608 Dec 30 
22:32 /usr/bin/python2.3.exe

>>> file('/usr/bin/python')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
IOError: [Errno 2] No such file or directory: '/usr/bin/python'
>>> file('/usr/bin/python.exe')
<open file '/usr/bin/python.exe', mode 'r' at 0xa069320>
>>> file('/usr/bin/python2.3')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
IOError: [Errno 2] No such file or 
directory: '/usr/bin/python2.3'
>>> file('/usr/bin/python2.3.exe')
<open file '/usr/bin/python2.3.exe', mode 'r' at 0xa0c8de0>
msg20416 - (view) Author: Marc-Andre Lemburg (lemburg) * (Python committer) Date: 2004-07-23 10:34
Logged In: YES 
user_id=38388

Would applying os.path.realpath() to sys.executable before
trying to open that file fix the problem on Cygwin ?

Another question: does using libc_ver() even make sense on
cygwin ?

libc_ver() was never intended to be used on non-*nix
platforms. I don't even know whether it works on other
platforms than Linux.
msg20417 - (view) Author: George Yoshida (quiver) (Python committer) Date: 2004-07-29 23:29
Logged In: YES 
user_id=671362

Sorry for my late response, Marc.

> Would applying os.path.realpath() to sys.executable before
> trying to open that file fix the problem on Cygwin ?

That change fixes the IO problem. After this, it doesn't raise 
IOError. The result of platform.libc_ver() is as follows:

>>> import platform
>>> platform.libc_ver()
('', '')

> Another question: does using libc_ver() even make sense on
> cygwin ?

As far as I have checked, it doesn't look like so. According to 
the Cygwin FAQ[*], Cygwin doesn't use glibc, although it 
says that there's a counterpart(called ``newlib'') in Cygwin. C 
runtime embedded into cygwin1.dll uses newlib.

Experienced C & Cygwin programmers might anser this 
question more precisely.

[*] Where is glibc? :  
http://rustam.uwp.edu/support/faq.html#SEC88
   
msg20418 - (view) Author: Marc-Andre Lemburg (lemburg) * (Python committer) Date: 2007-01-13 19:29
Since Cygwin doesn't appear to use the GLibC, there's no surprise in libc_ver() not returning any useful information.
History
Date User Action Args
2022-04-11 14:56:03adminsetgithub: 40115
2004-04-02 14:55:32quivercreate