site-packages versus site-python

Steve Holden steve at
Sat Mar 5 22:30:30 CET 2005

enrio at wrote:
> I recently installed python 2.4, and many installed software packages
> stopped working. Some things got working after I copied some files and
> directories from /usr/lib/python2.3/site-packages to
> /usr/lib/python2.4/site-packages, but I also had to install a newer
> PyXml package, as some of the files that came with python2.4 required a
> newer version of pyxml than I had in python2.3/site-packages.
> I wonder if there is any particular reason I have no
> /usr/lib/site-python directory, and everything is installed in
> version-specific site-packages.
Well, broadly, the reason is that it allows version-specific code to be 
included in libraries.

Of course, Python is so good at maintaining backward compatibility that 
it's unlikely a pure Python module will fail to run on the next version 
of Python. But you have to do this for extension modules, where the code 
is compiled against a specific version of the Python interpreter API, 
which doesn't stay the same from one version to the next.

> I have Fedora Core 3. Is it the Fedora packagers who prefer installing
> everything in the version-specific directory? Is there no way to have
> older packages continue working in the presence of python2.4? (I still
> want the newest to be the default!)
> I have tried (cd /usr/bin; grep '#!.*python' * 2>/dev/null), and very
> few of the programs have a specific version in the interpreter line. Is
> there any good reason this is so?
> Thinking about it, a particular python program may require a particular
> module, but not any particular version of python or the module. The
> module perhaps requires at least python2.3, but could run just as well
> with python2.4 or later. It does not make sense to have the program
> demand a particular version of python in its interpreter string (e.g.,
> "#!/usr/bin/python2.3"), but what about the module. Would it be better
> to put the module in site-python and include code to check the
> interpreter version?
> Perhaps there is no perfect solution that covers all permutations, but
> on the other hand, what is currently the "correct philosophy" of
> version handling?
The current "correct" philosophy is to have version-specific libraries. 
Of course, there is nothing to stop you building your own 
*no*-version-specific library directory and configuring it on to the 
PYTHONPATH for each version you run.

Meet the Python developers and your favorites March 23-25
Come to PyCon DC 2005            
Steve Holden                 

More information about the Python-list mailing list