I have a pybind11 module in an application with an embedded executable
that is created with:
PYBIND11_EMBEDDED_MODULE(mrv2, m) { ... }
Thus, it becomes a built-in module. This works fine, the module is
imported, its help() can be seen, etc.
However, as there's no .so I cannot easily document it with Sphinx (or
the tutorials don't show me how).
The application with the embedded python has a console and the ability
to run arbitrary scripts.
I was hoping I could call Sphinx from a script running in the embedded
python to create the documentation. This seems to be almost working,
but due to my unfamiliarity with Sphinx, I am unable to have it
recognize the mrv2 embedded module as the one to document.
ChatGPT offered some help, but not enough. I have the following script:
import os
import sys
import site
# My module to document
import mrv2
# Import pip path
pip_dir = site.USER_SITE
sys.path.append(pip_dir)
# Load Sphinx modules
from sphinx.application import Sphinx
from sphinx.ext import autodoc
# Define a custom autodoc documenter for Pybind11 modules
class Pybind11ModuleDocumenter(autodoc.ModuleDocumenter):
objtype = "pybind11 module"
def can_document_member(self, member, membername, isattr, parent):
return False
# This never gets called, which is probably the issue.
def import_object(self):
print("Importing module:", self.modname)
self.object = mrv2 # module to document
return True
# root dir
root_dir = "/media/gga/datos/code/applications/mrv2/"
sphinx_dir = root_dir + "/sphinx"
# Set up the Sphinx application
source_dir = os.path.abspath( sphinx_dir )
build_dir = os.path.abspath( sphinx_dir + '/build')
doctree_dir = os.path.abspath( sphinx_dir + '/doctrees')
conf_dir = os.path.abspath( sphinx_dir )
app = Sphinx(source_dir, conf_dir, build_dir, doctree_dir, freshenv=True,
warningiserror=True, buildername='html')
# Add the custom documenter
# This seems not to do anything
app.registry.documenters["pybind11 module"] = Pybind11ModuleDocumenter
# Build the documentation
app.builder.build_all()
# Build the html web pages
app.build()
# Remove the custom documenter
del app.registry.documenters["pybind11 module"]
Any ideas on what might be wrong? Do I have to do some additional work
on the index.rst or conf.py file?
--
You received this message because you are subscribed to the Google Groups
"sphinx-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to sphinx-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sphinx-users/b1de162e-72a6-9530-7cfc-7e3fb6bd5ca5%40gmail.com.