Hacker News new | past | comments | ask | show | jobs | submit login

I think this technique would not work with the limited API: https://docs.python.org/3/c-api/stable.html#limited-c-api

The Limited API has a nice benefit of letting you build artifacts that are compatible with a wide range of Python versions. The technique described in this article tightly couples the extension code to the interpreter internals.




It doesn't work with any version of the public API, Limited, Stable, or Unstable, because this is not a part of the API. It's more of an application of Hyrum's Law[1].

That said, assuming the structures themselves exist on the versions of Python you're targeting in a format compatible with whatever hacking you're doing on them, it's very easy to compile for lots of Python versions using cibuildwheel[2] and the rest of the PyPA ecosystem.

I don't think the Limited API is very useful, as a practical matter for the common distribution methods you need the wheel to be built with the target Python version.

[1]: https://www.hyrumslaw.com/

[2]: https://github.com/pypa/cibuildwheel


> I don't think the Limited API is very useful, as a practical matter for the common distribution methods you need the wheel to be built with the target Python version.

The limited API provides ABI stability, which allows building a single artifact that will work across Python versions.

We use this for the Protobuf PyPI package. A single artifact like protobuf-4.25.1-cp37-abi3-manylinux2014_x86_64.whl can be used with any Python version >= 3.7.


Ya, but so what? It's zero engineering effort to build the wheels for all the compatible versions. You don't win anything with the limited API.


You suggested it wasn't possible (or practical), so it seemed worth clearing up that it is indeed possible.

It is nice to cut the number of distributed artifacts by a factor of four. Also, depending on third-party repositories full of build infrastructure increases your risk of supply chain attacks.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: