Linux/Win32 func. to get Python instdir (not exedir) + site-packages => extensions mgmt

pythonewbie eproust at gmail.com
Sun Jan 20 19:00:38 EST 2008


On 21 jan, 00:09, John Machin <sjmac... at lexicon.net> wrote:
> On Jan 21, 8:58 am, pythonewbie <epro... at gmail.com> wrote:
>
> > I just would like to know if I would ALWAYS find the install directory
> > in sys.path[6] and site-packages directory in sys.path[7] on any Win32
> > platform and sys.path[2] and site-packages directory in sys.path[6] on
> > any Linux platform.
>
> > If the reply is : "YES you can be sure of it !"
>
> No, you can't be sure of any such thing. In general in computing
> assuming a fixed position in a variable-length list is a nonsense.
>
> Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit
> (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.>>> import sys
> >>> from pprint import pprint as pp
> >>> pp([(x, p) for x, p in enumerate(sys.path)])
>
> [(0, ''),
>  (1, 'c:\\python25\\lib\\site-packages\\setuptools-0.6c3-py2.5.egg'),
>  (2, 'C:\\WINDOWS\\system32\\python25.zip'),
>  (3, 'c:\\python25\\DLLs'),
>  (4, 'c:\\python25\\lib'),
>  (5, 'c:\\python25\\lib\\plat-win'),
>  (6, 'c:\\python25\\lib\\lib-tk'),
>  (7, 'c:\\python25'),
>  (8, 'c:\\python25\\lib\\site-packages'),
>  (9, 'c:\\python25\\lib\\site-packages\\win32'),
>  (10, 'c:\\python25\\lib\\site-packages\\win32\\lib'),
>  (11, 'c:\\python25\\lib\\site-packages\\Pythonwin')]
>
>
>
> Something like this might be more reliable:
>
> >>> import sys, re
> >>> for p in sys.path:
>
> ...    m = re.match(r'(.*)[\\/][Ll]ib[\\/]site-packages$', p)
> ...    if m:
> ...       print m.group(1, 0)
> ...       break
> ... else:
> ...    raise Exception('Huh?')
> ...
> ('c:\\python25', 'c:\\python25\\lib\\site-packages')
>
>
>
> > All would be great for me and I would be ready to create a script to
> > detect with a reliable manner the installation dir. et site-packages
> > dir. for all my Linux/Win32 Python apps.
>
> You mentioned Python versions back to 2.1 earlier. However you
> evidently haven't bothered to start up Python 2.1 and look at
> sys.path:
>
> C:\junk>\python21\python
> Python 2.1.3 (#35, Apr  8 2002, 17:47:50) [MSC 32 bit (Intel)] on
> win32
> Type "copyright", "credits" or "license" for more information.>>> import sys; sys.path
>
> ['', 'C:\\junk', 'C:\\python21\\DLLs', 'C:\\python21\\lib', 'C:\
> \python21\\lib\\
> plat-win', 'C:\\python21\\lib\\lib-tk', 'C:\\python21']
>
>
>
> Before you rush out and re-invent the wheel, have a look at this:
>
> http://www.python.org/community/sigs/current/distutils-sig/
>
> You may like to re-ask your questions on the distutils mailing list.
>
> HTH,
> John

Hi John,

Thanks for your help and suggestions.

Your code is very interesting for the newbie that I am.

But I have not understood your two last suggestions...

As a newbie, I have asked usenet for help in order to get a easy/
convenient way to get the site-packages directory, and the best reply
I obtained, was to use the function
distutils.sysconfig.get_python_lib().

This function is a really good way to avoid to re-invent the wheel to
get what I wanted !

Cheers.



More information about the Python-list mailing list