Skip to main content

pybind11_mkdoc

CI

This tool processes a sequence of C/C++ headers and extracts comments that can be referenced to generate docstrings in pybind11 binding code.

To install the latest development version:

python -m pip install git+https://github.com/pybind/pybind11_mkdoc.git

Usage

To use this tool, simply invoke it with a list of header files. All output will be written to stdout, or to a filename provided via the -o parameter.

python -m pybind11_mkdoc -o docstrings.h header_file_1.h header_file_2.h

Optionally, the path to the libclang.so and LLVM directory can be specified by setting the LIBCLANG_PATH and LLVM_DIR_PATH environment variables respectively.

Suppose we provide an input file with the following contents:

/// Docstring 1
class MyClass {

    /// Docstring 2
    MyClass() {
    }

    /// Docstring 3
    void foo() {
    }

    /// Docstring 4 for overload
    void foo(int bar) {
    }

    /// Docstring 5 for yet another overload
    void foo(int bar, int baz) {
    }
};

Once processed via pybind11_mkdoc, the docstrings can be accessed as follows from pybind11 binding code:

#include "docstrings.h"

const char *docstring_1 = DOC(MyClass);
const char *docstring_2 = DOC(MyClass, MyClass);
const char *docstring_3 = DOC(MyClass, foo);
const char *docstring_4 = DOC(MyClass, foo, 2);
const char *docstring_5 = DOC(MyClass, foo, 3);

Note the counter suffix for repeated definitions and docstrings. Namespaces and nested classes are also supported, in which case the number of arguments to the DOC macro simply increases.

In practice, the docstrings are likely referenced in a matching set of binding declarations:

py::class_<MyClass>(m, "MyClass", DOC(MyClass))
    .def(py::init<>(), DOC(MyClass, MyClass))
    ...

CMake

The pybind11_mkdoc CMake function is included to easily generate header for a pybind11 module when compiling said module in CMake. The function generates the headers based on the arguments provided. In addition, it add target dependencies so the pybind11-mkdoc header file is generated before the pybind11 module. Also, it will automatically add the current binary directory to the pybind11 module's includes, so it can easily be included when compiling the module.

The required parameters are:

  • OUTPUT - The name of the output file.
  • PYBIND11_MODULE - The pybind11 module target that these docs will be used for.
  • HEADERS - The header files to create docs for. These can be absolute paths or relative to the current source directory.

The optional parameters are:

  • EXTRA_ARGS - This string argument will be added verbatim to the pybind11-mkdoc command.

Below is an example of how it is used:

# Find pybind11-mkdoc
# This assumes you have already run a find_package for Python.
execute_process(
    COMMAND ${Python_EXECUTABLE} -c "import pybind11_mkdoc; print(pybind11_mkdoc.get_cmake_dir())"
    OUTPUT_VARIABLE pybind11_mkdoc_DIR
    OUTPUT_STRIP_TRAILING_WHITESPACE
)
find_package(pybind11_mkdoc REQUIRED CONFIG)

# Add the pybind11 module
pybind11_add_module(my_pybind11_module my_src_files.cc)
pybind11_mkdoc(
    OUTPUT my_pybind11_module_docs.h
    PYBIND11_MODULE my_pybind11_module
    HEADERS
        header_1.h
        /absolute/path/to/header_2.h
)

Limitations

This tool supports Linux and macOS for Python versions 3.9 to 3.14. Also, it requires Clang/LLVM to be installed.

Testing

Install the packages pytest, pytest-forked and pybind11:

python3 -m pip install pytest pytest-forked pybind11

Next, install this project:

python3 -m pip install .

And execute the tests (forked)

python3 -m pytest --forked

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pybind11_mkdoc-3.0.0.tar.gz (23.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pybind11_mkdoc-3.0.0-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file pybind11_mkdoc-3.0.0.tar.gz.

File metadata

  • Download URL: pybind11_mkdoc-3.0.0.tar.gz
  • Upload date:
  • Size: 23.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pybind11_mkdoc-3.0.0.tar.gz
Algorithm Hash digest
SHA256 777a19b5943ef8e3d22dde21245c47a297b560f241c21e841b9dd4c1ee3fe107
MD5 dcb578c629c05106235a17a3cc700299
BLAKE2b-256 86543b8504d21361c94b5c56ab49b49a3aca4ce40c1414e6c1dc11ea6754170a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybind11_mkdoc-3.0.0.tar.gz:

Publisher: cd.yml on pybind/pybind11_mkdoc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pybind11_mkdoc-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: pybind11_mkdoc-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 17.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pybind11_mkdoc-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d836f5ef29276e74aeb0456b3bdb219e7bbfca839c0e4c6831004bc9dc62270c
MD5 3c8956f9a601a7b365a8117588db2025
BLAKE2b-256 ec7039ebac87ad9fd40261828a1c2bdcf5891f9f4c53a42c840599eafb2bd263

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybind11_mkdoc-3.0.0-py3-none-any.whl:

Publisher: cd.yml on pybind/pybind11_mkdoc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page