[pypy-dev] PyPy3: is bytecode really incompatible between releases?

Michał Górny mgorny at gentoo.org
Sun Oct 20 03:01:54 EDT 2019


On Sun, 2019-10-20 at 07:32 +0300, Matti Picus wrote:
> On 19/10/19 11:55 pm, Michał Górny wrote:
> > Hello,
> > 
> > I've noticed that the compiled module suffix keeps changing between
> > PyPy3 releases: it's been .pypy3-71-*.so for 7.1, now it's .pypy3-72-
> > *.so (also .pyc).  However, this is a bit surprising to me given that
> > for PyPy2 it's still at .pypy-41.so.
> > 
> > Is the bytecode generated by successive PyPy3 releases really
> > incompatible between them?  Or are the suffix changes only incidental?
> > They cause quite some trouble for us, since they make it necessary to
> > recompile installed modules on Gentoo, and PyPy's overzealous compiling
> > causes access violations for our users.
> > 
> > TIA for any help.
> For c-extensions the major-minor version becomes the PEP 425 ABI tag 
> https://www.python.org/dev/peps/pep-0425/#abi-tag. My operating 
> assumption is that any change in the ABI requires a change in that 
> field. Our support for the massive CPython C-API changes between 
> versions, which changes the ABI. In particular, between 7.1 and 7.2 the 
> PyDateTime_CAPI structure size changed, and we changed the order of 
> fields in Py_Buffer, as well as adding many missing functions and 
> macros. The complete log is here 
> http://doc.pypy.org/en/latest/release-v7.2.0.html#c-api-cpyext-and-c-extensions 
> for both versions and here 
> http://doc.pypy.org/en/latest/release-v7.2.0.html#python-3-6-c-api for 
> the pypy3.6 specific ones.
> 
> 
> The fact that the PyPy2 ABI tag did **not** change is most likely a bug 
> in the release process. I think there will be cases where pypy2-v7.1.1 
> and pypy2-v7.2.0 c-extension modules will be slightly incompatible with 
> eachother, although a cursory test of mixing NumPy across versions 
> (building on 7.2, copying into 7.1) seems to pass "np.test()". Perhaps a 
> better test would be to mix the pygolang c-extension modules, which seem 
> to stress-test the C-API more extensively given the number of issues it 
> exposes.

Thanks for the explanation.  This answers my question.  Do you need me
to file a bug for the ABI tag not changing in PyPy2, or will you take it
from here?

> The pyc files should always be rebuilt in each python environment, so I 
> am not sure what problems could be caused by bumping the ABI tag. Does 
> Gentoo somehow mix the byte-compiled pyc files across versions?
> 
> 
> I am not sure what you mean by "compiling causes access violations for 
> our users", could you point to a discussion of the problem?
> 

It's related to circular dependencies between packages.  For example,
when rebuild setuptools for the new version, it tries to load its
plugins and byte-compile them as well.  Since they don't belong to
the setuptools package, our PM catches that as illegal access.

It's a generic problem with Python, not something you need to worry
about.  I've just been pointed out that we already have a hack for it,
I just need to add PyPy3 to it.

-- 
Best regards,
Michał Górny

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 618 bytes
Desc: This is a digitally signed message part
URL: <http://mail.python.org/pipermail/pypy-dev/attachments/20191020/ef394b6d/attachment.sig>


More information about the pypy-dev mailing list