[Python-ideas] Changing the default install location, script versioning (Packages and PEP 370)

Ned Deily nad at acm.org
Tue Jul 21 00:59:55 CEST 2009


Jesse Noller wrote:
> Of course, doing this begs the question - why have /bin and /lib be
> top-level directories, instead favoring a layout which looks like:
> 
> .local/
>     python2.6/
>         bin/
>         lib/
> 
> The data and doc directories which some packages might include should
> follow the same convention, to avoid conflicts in those directories as
> well.

As you know, Jesse, there is a precedent for this kind of layout:  
Python framework installs on Mac OS X.  For those not familiar with it, 
the directory layout is something like this:

{/System/Library/ | /Library | ~/Library }/Frameworks/Python.framework/
   2.6/
       bin/
       include/
       lib/
       share/
   3.1/
       bin/
       include/
              ...

where
  /System/Library/... contains the Apple-supplied Python(s),
  /Library/... contains the sysadmin-installed set of Pythons
                   (for example, the default for python.org installers)
  ~/Library/... contains user-installed Pythons.

So, not only do framework installs support multiple versions at the user 
level, they do so at the system and vendor level as well, and support 
multiple versions of essentially all Python-installed objects (i.e. 
shared libraries, executables, scripts, etc).  (A side note: with OS X 
Python frameworks builds, ~/.local really isn't needed since 
~/Library/Frameworks/... already provides its functionality and more.)

As with any scheme supporting multiple versions, a downside to this is 
potential user confusion over how to manage access to these multiple 
versions.  For those who don't regularly follow Python on OS X matters, 
this continues to be the source of some of the most frequent support 
questions.  Those who understand the concept of search $PATH can figure 
out how to deal with it a lot easier than those who don't.

As a convenience, the python.org 2.x and 3.1 installers by default also 
install versioned symbolic links in /usr/local/bin to the standard 
python command line objects in their respective framework bin 
directories., i.e. pythonx.x, pydocx.x, idlex.x.  Something similar 
could be done automatically for distutil-installed scripts, of course.

-- 
 Ned Deily,
 nad at acm.org




More information about the Python-ideas mailing list