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

John Machin sjmachin at lexicon.net
Sun Jan 20 19:23:46 EST 2008


On Jan 21, 11:00 am, pythonewbie <epro... at gmail.com> wrote:
> 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 !
>

I am talking about your underlying goal "My goal is to verify if an/
several extension(s) are installed and to automatically install the
missing ones on Linux or Win32." ... you may well find that there is
at least one wheel for "automatically install".




More information about the Python-list mailing list