A while ago I made a small pure-python uio library with some examples on how to use uio_pdrv_genirq to directly use various peripherals on the BBB. More recently I built a PRU-ICSS library using uio_pruss on top of it, making it a pure-python alternative to prussdrv.
Although I personally think pasm is still the better choice for a lot of projects, there are people who prefer using clpru. For that reason, I’ve just added a simple ELF loader to the icss module, along with an example.
I’ve only tested this on beaglebones, but it should be easy enough to adapt the examples to the bbx15 once you’ve made the necessary changes to the device tree to use uio_pruss instead of remoteproc-pru. Since the x15 has two pruss instances, they need to be differentiated somehow. My example udev rules file already supports this if you add a “pruss-instance” property to each subsystem to give it a name (which then shows up in the symlinks it creates).
Here ya go: https://github.com/mvduin/py-uio/#uio_pruss
Documentation is still scarce unfortunately. Wiki contributions and patches for docstrings are welcome of course.