[Python-Dev] versioned .so files for Python 3.2
Matthias Klose
doko at ubuntu.com
Fri Jul 16 12:40:44 CEST 2010
On 15.07.2010 01:59, Barry Warsaw wrote:
> PEP 384 describes a change to ``PyModule_Create()`` where ``3`` is
> passed as the API version if the extension was complied with
> ``Py_LIMITED_API``. This should be formalized into an official macro
> called ``PYTHON_ABI_VERSION`` to mirror ``PYTHON_API_VERSION``. If
> and when the ABI changes in an incompatible way, this version number
> would be bumped. To facilitate sharing, Python would be extended to
> search for extension modules with the ``PYTHON_ABI_VERSION`` number in
> its name. The prefix ``abi`` is reserved for Python's use.
>
> Thus for example, an initial implementation of PEP 384, compiled with
> `--with-so-abi-tag=cpython-xy` would search for the following file
> names when extension module `foo` is imported (in this order)::
>
> foo.abi3.so
> foo.cpython-xy.so
> foo.so
>
> The distutils [7]_ ``build_ext`` command would also have to be
> extended to compile to shared library files with the ``abi3`` tag,
> when the module author indicates that their extension supports that
> version of the ABI. This could be done in a backward compatible way
> by adding a keyword argument to the ``Extension`` class, such as::
>
> Extension('foo', ['foo.c'], abi=3)
I like the proposal, but IMO it is too unspecific about the abi tag. Assume
that an extension is built with such a configured python and then tried to run
with an abi compatible configured python, but with a slightly different version
tag, the extension won't be found. Differing file names per configuration
should be avoided. Proposing
1) Remove the configure option and use the new naming using the tag for
all configurations unconditionally. Everybody can expect the same
name on every installation, and PEP 384 most likely will require
using a tag too.
As Amaury did point out, there is a use case in that PyPy can use this
tag too to build extensions only usable by PyPy.
2) As PEP 3147 defines a non-configurable name for .pyc files, this PEP
should define a non-configurable way for the tag. The tag should
include all information which currently makes an extension ABI
incompatible:
- the python implementation (cpython, PyPy, ...)
- the python version (3,2, 3.3, ...)
- unicode configure option (--with-wide-unicode, 16 or 32)
- platform information (necessary?)
If this list changes for coming python versions, then it can be
extended.
Barry pointed out on irc chat that people might want to build
experimental ABI incompatible versions, which should have its
own tag. If this is wanted, please provide a configure option
which lets extend/append to the tag.
3) In case that 1) is not acceptable, the --with-so-abi-tag option
should be implemented in such a way that it isn't required to
take any arguments, and in this case to default to the fixed
naming schema described in 2).
Matthias
More information about the Python-Dev
mailing list