Panda3D uses a homegrown tool called Interrogate to generate the Python bindings using the Python C extension API. From my understanding, this API causes problems for PyPy, and cffi should be used instead. Interrogate supports multiple output modes, so a cffi output could be added to Interrogate.
That being said, your actual question is on the WHL, not the bindings. Did you execute makepanda with PyPy?
Are you using a Python 2 or a Python 3 version of PyPy? Also, have you tried renaming the wheel to us a PyPy tag? The wheel may just be named incorrectly.
This looks is not implemented in pypy yet, so I added a bug there [2].
Some other notes:
The WHL needs to be built with pypy, because the libraries inside are named after the platform building them e.g. “ai.pypy3-510-x86_64-linux-gnu.so”.
If the panda3d “built” directory had a subdirectory with the platform name it would make it easier when switching between different pythons (e.g. in virtualenvs).
It looks like some of the optimizations in py_panda.* makes some assumptions about some Python structures that don’t work with PyPy. Perhaps we could use #ifdef to detect whether PyPy is used and fall back to a different approach for PyPy.
We did use python-config in the past, but abandoned it when it caused serious problems for the Panda build. One of the problems was that it included flags like -DNDEBUG that we absolutely didn’t want to inherit from the Python build.
As for the ABI tag, makewheel.py uses get_config_var(‘SOABI’) to determine the proper ABI tag. What is this set to for your PyPy installation?