This classification follows the Diátaxis Framework.
Objective: Write a tutorial, some examples, and reference documentation for our Python code.
Every step should lead to a “yay!” moment, which marks the end of the section. This keeps the learner motivated.
Appendixes are optional, i.e. not required to follow the tutorial, but highly recommended.
- Getting started
- Creating our code project
- What is our library (present some minimal
x.py
file in a dedicated directory, will be the basis of the tutorial) - Install Python
- Check that our code works (yay!)
- What is our library (present some minimal
- Using virtual environments for development
- Create a virtual environment (and/or conda environment)
- Activate our virtual environment (it will always be the first step)
- Check that our code also works (yay!)
- Adding external dependencies
- Add import from small third party library
- Install it inside our virtual environment
- Check that our code works (yay!) and it doesn’t outside the virtual environment (as expected)
- Appendix: Using version control
- Install git (we will use it during the tutorial)
- Write a barebones
README.md
(we will expand it later), a.gitignore
file (copied from gitignore.io), and a properLICENSE
fileLICENSE.md
?LICENSE
?COPYING
? Whatever
- Create the first commit for the project (yay!)
- Creating our code project
- First steps to document our project using Sphinx
- Installing Sphinx
- Activate our virtual environment
- Install Sphinx inside the virtual environment
- Check that
sphinx-build --help
works (yay!)
- Creating the project layout
- Run the sphinx-quickstart wizard: separate source and build
(
y
), project name, author name, and go - Check that the correct files are created (yay!)
- Run the sphinx-quickstart wizard: separate source and build
(
- Converting our documentation to local HTML
- Build the HTML output using
sphinx-build -b -W html doc doc/_build/html
[1] - Navigate to
doc/_build/html
and launch an HTTP server (python -m http.server
) - Open http://localhost:8000 in a web browser, and see the HTML documentation (yay!)
- Build the HTML output using
- Making a change and regenerating the documentation
- Add a sentence to
index.rst
(no need to explain in detail what reST is at this stage) - Rebuild HTML
sphinx-build -W -b html ...
- Observe that the HTML docs have changed (yay!) (we will have to do this every time we change something)
- Add a sentence to
- Simplify documentation building by using Make
- Install Make (and its Windows counterpart)
- Make another trivial change
- Build HTML doing
cd doc && make html
- Observe that the HTML docs have changed (yay!)
- Converting our documentation to PDF
- Install TeX Live to create PDF output (should work on every operative system)
- Build LaTeX using
make latexpdf
- See that the PDF appeared (yay!)
- Appendix: PDF without LaTeX using rinoh (beta)
- Installing Sphinx
- Customizing Sphinx configuration
- Changing the HTML theme
- Install https://pypi.org/project/furo/
- Change the
html_theme
inconf.py
- Rebuild the HTML documentation and observe that the theme has changed (yay!)
- Changing the PDF appearance
- Add a
latex_theme
and set it tohowto
- Rebuild
make latexpdf
- Check that the appearance changed (yay!)
- Add a
- Enable an extension
- Add a string to the
extensions
list inconf.py
forsphinx.ext.duration
- Rebuild the HTML docs
make html
and notice that now the times are printed (yay!)
- Add a string to the
- Changing the HTML theme
- Writing narrative documentation with Sphinx
- First focus on
index.rst
, gently introducing the learner to reST and mentioning Semantic Line Breaks. - Then add another
.rst
file to teach howtoctree
works. - Then enable Markdown adding
myst_parser
to the extensions and authoring a Markdown file, to show that both can exist at the same time. - Then continue introducing elements of the syntax to add pictures, cross-references, and the like.
- First focus on
- Using Jupyter notebooks inside Sphinx
- Describing code in Sphinx
- Explain the Python domain as part of narrative documentation to interleave code with text, include doctests, and justify the usefulness of the next section.
- Autogenerating documentation from code in Sphinx
Practical, problem-oriented documents, more open ended than the tutorial. For example:
- How to publish (deploy) a Sphinx project
- How to publish (deploy) the documentation of a Python library to PyPI
- How to turn a bunch of Markdown files into a Sphinx project
- How to turn a bunch of Jupyter notebooks into a Sphinx project
- How to localize an existing Sphinx project
- How to customize the appearance of the HTML output of a Sphinx project
- How to convert existing reStructuredText documentation to Markdown
- How to use Doxygen autogenerated documentation inside a Sphinx project
- How to keep a changelog of your project
More detailed explanations of certain topics. For example:
- Understanding reStructuredText in Sphinx
- What to put in
conf.py
- Sphinx internals
All the references should be external: the Sphinx reference, the MyST and reST syntax specs, and so forth.
[1] | At first I considered “make mode”, but the current maintainers don’t know much about its original intent (see my comment here and the discussion after it) |