On Jun 24, 2010, at 11:05 AM, Daniel Stutzbach wrote:

>On Thu, Jun 24, 2010 at 10:50 AM, Barry Warsaw <ba...@python.org> wrote:
>
>> The idea is to put the Python version number in the shared library file
>> name,
>> and extend .so lookup to find these extended file names.  So for example,
>> we'd
>> see foo.3.2.so instead, and Python would know how to dynload both that and
>> the
>> traditional foo.so file too (for backward compatibility).
>>
>
>What use case does this address?

Specifically, it's the use case where we (Debian/Ubuntu) plan on installing
all Python 3.x packages into /usr/lib/python3/dist-packages.  As of PEP 3147,
we can do that without collisions on the pyc files, but would still have to
symlink for extension module .so files, because they are always named foo.so
and Python 3.2's foo.so won't (modulo PEP 384) be compatible with Python 3.3's
foo.so.

So using the same trick as in PEP 3147, if we can name Python 3.2's foo
extension differently than the incompatible Python 3.3's foo extension, we can
have them live in the same directory without symlink tricks.

>PEP 3147 addresses the fact that the user may have different versions of
>Python installed and each wants to write a .pyc file when loading a module.
> .so files are not generated simply by running the Python interpreter, ergo
>.so files are not an issue for that use case.

See above.  It doesn't matter whether the pyc or so is created at run time by
the user or by the distro build system.  If the files for different Python
versions end up in the same directory, they must be named differently too.

>If you want to make it so a system can install a package in just one
>location to be used by multiple Python installations, then the version
>number isn't enough.  You also need to distinguish debug builds, profiling
>builds, Unicode width (see issue8654), and probably several other
>./configure options.

This is a good point, but more easily addressed.  Let's say a distro makes
three Python 3.2 variants available, one "normal" build, a debug build, and
UCS2 and USC4 versions of the above.  All we need to do is choose a different
.so ABI tag (see previous follow) for each of those builds.  My updated patch
(coming soon) allows you to define that tag to configure.  So e.g.

Normal build UCSX: SOABI=cpython-32 ./configure
Debug build UCSX:  SOABI=cpython-32-d ./configure
Normal build UCSY: SOABI=cpython-32-w ./configure
Debug build UCSY:  SOABI=cpython-32-dw ./configure

Mix and match for any other build options you care about.  Because the distro
controls how Python is configured, this should be fairly easy to achieve.

-Barry

Attachment: signature.asc
Description: PGP signature

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to