[Python-Dev] What version is an extension module binary compatible with

Nathaniel Smith njs at pobox.com
Tue Mar 28 12:31:58 EDT 2017


On Mar 28, 2017 8:29 AM, "Serhiy Storchaka" <storchaka at gmail.com> wrote:

On 28.03.17 14:24, Miro Hrončok wrote:

> However, recently we found an issue with this approach [1]: an extension
> module built against Python 3.6.1 cannot be run on Python 3.6.0, because
> it uses a macro that, in 3.6.1, uses the new PySlice_AdjustIndices
> function.
>

The macro expanding to PySlice_AdjustIndices is used only when
Py_LIMITED_API is not defined or is defined to the version equal or greater
the version in which PySlice_AdjustIndices was added.


That's nice, but not sufficient. Py_LIMITED_ABI is cool, but the vast
majority of distributed packages don't use it, and instead rely on the
"unlimited" ABI being forward and backwards compatible within each minor
release. For example, this assumption is hard coded in the wheel format,
which has no way to even describe a wheel that needs 3.6.x with x >= 1.
People uploading packages to pypi use whatever version of 3.6 they have
lying around and assume it will work for everyone downloading.

IMO this is a bug, and depending on how many packages are affected it might
even call for an emergency 3.6.2. The worst case is that we start getting
large numbers of packages uploaded to pypi that claim to be 3.6.0
compatible but that crash like crash with an obscure error when people
download them.

-n
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20170328/f378cdcd/attachment.html>


More information about the Python-Dev mailing list