About this project

The RobotPy project maintains Python wrappers around many different C++ libraries to allow its users to use Python for the FIRST Robotics Competition. It was much too work to create/maintain handwritten wrappers around these libraries, and other tools in the python ecosystem did not meet our needs.

robotpy-build was created to automate large parts of the work required to maintain these wrappers. If you have this problem too, we hope that robotpy-build will be useful for you as well.

Goals

A primary goal of robotpy-build is to make it really simple to define and build python wrappers for C++ code using pybind11. To make that possible, it also bundles these capabilities:

  • Manages native/binary C/C++ dependencies via pypi compatible packages

  • Autogenerate python wrappers around the native code by parsing C++ header files, including those that contain modern C++ features

  • Support extensive customization of the wrappers when the autogeneration fails

  • Builds normal python wheels from the generated and handwritten code that can be installed by pip and imported as a normal python package

  • robotpy-build projects can depend on native/binary libraries installed by other robotpy-build projects

robotpy-build is intended to be a generally useful tool for any python project that has C/C++ dependencies. If you find that isn’t the case, please report a bug on github.

Non-goals

  • robotpy-build built wheels do not currently conform to the manylinux specification as it prohibits dependencies outside of the wheel

  • We don’t intend to build wrappers around libraries installed on your system