Load Sphinx environment.pickle and List all Labels#

In order to come up with a reliable and standardized way of referring to document sections and document it in MySt and Markdown for Sphinx Cheatsheet, I went down a pretty deep rabbit hole of Sphinx label manipulations.

Ultimately, I decided to use the {ref} and {doc} MyST roles, primarly, in combination with the sphinx.ext.autosectionlabel extension [1]

To better understand what labels were being generated by the extension and how, I decided to find out how to list all labels Sphinx had in store.

Reading a bit around I stumbled upon a thread on StackOverflow which touched upon this. After playing around a bit, I managed to load environment.pickle and list the labels in the std domain.

1import pickle
2
3envfile = open('./_build/.doctrees/environment.pickle','rb')
4environ = pickle.load(envfile)
5elabels = environ.domaindata['std']['labels']
6
7for k,v in elabels.items():
8    # docname, (nodeid, title)
9    print(f"{k}: {v}")

⚠️ In case you’re using the sphinx-sitemap extension, you won’t be able to explore the environment.pickle as easily due to errors while loading it [2]. Remove it from your extensions and re-build; the errors for pickle.load will disappear.

Addendum#

Once you’re done reading this article, you can continue by having a look at the related content I’ve linked below.