# 13.10. Installing and running Sphinx (building the Open MPI docs)

As with all content in the Developer’s Guide, this section is only relevant for developers who work in the Open MPI code base itself. End users who install a binary Open MPI package or build from an official Open MPI distribution tarball do not need to have Sphinx installed.

## 13.10.1. Installing Python

The Sphinx tool is written in Python, and therefore needs to have Python available. As of late 2022, Sphinx requires Python >= v3.7.

This documentation does not contain detailed instructions for installing a Python version sufficient for using Sphinx. Consult your local OS documentation for how to obtain Python >= v3.7, or search the internet for further information.

## 13.10.2. Installing Sphinx

The Sphinx documentation recommends installing Sphinx (and its required Python dependencies) via `pip`, which typically requires connectivity to the general internet.

Note

If you are running on MacOS, you may be tempted to use Homebrew or MacPorts to install Sphinx. The Sphinx documentation recommends against this. Instead, you should use `pip` to install Sphinx.

There are three general ways to install Sphinx; you only need one of them.

### 13.10.2.1. Install Sphinx in a Python virtual environment

The preferred method of installing Sphinx for Open MPI documentation development is to install Sphinx in a Python virtual environment. This places Sphinx in a sandbox that will not conflict with other `pip`-installed Python modules. This example installs Sphinx and other Python modules in the `ompi-docs-venv` tree under your Open MPI Git clone directory:

    # Create the Python virtual environment
    shell$ cd TOP_OF_OPEN_MPI_GIT_CLONE
    shell$ python3 -m venv ompi-docs-venv
    # Or: python3 -m virtualenv ompi-docs-venv
    # Or: virtualenv --python=python3 ompi-docs-venv

    # Activate the virtual environment
    shell$ . ./ompi-docs-venv/bin/activate

    # Notice that the shell prompt changes
    # Now install the required Python modules
    (ompi-docs-venv) shell$ pip3 install -r docs/requirements.txt
    # Or: python3 -m pip install install -r docs/requirements.txt

Note that sourcing the `activate` script will change your prompt to put the name of your virtual environment directory at the front, just as a visual reminder that you are operating in a Python virtual environment. You can run `deactivate` to leave the virtual environment.

Important

You will need to source the `activate` script to put Sphinx in your `PATH` before running `configure`.

### 13.10.2.2. Install Sphinx globally

If Python virtual environments are not desirable on your system, you can install Sphinx globally on your system (you may need to run with root privileges):

    shell$ cd TOP_OF_OPEN_MPI_GIT_CLONE
    shell$ pip3 install -r docs/requirements.txt
    # Or: python3 -m pip install install -r docs/requirements.txt

This will install Sphinx and some Python modules required for building the Open MPI documentation in a system-wide location.

This will likely install the `sphinx-build` executable in a location that is already in your `PATH`. If the location is not already in your `PATH`, then you need to add it to your `PATH`.

Important

You will need to ensure that Sphinx is in your `PATH` before running `configure`.

### 13.10.2.3. Install Sphinx locally

If you cannot or do not want to install Sphinx globally on your system, the following will install Sphinx somewhere under your `$HOME`. It is the same `pip` command as shown above, but with the addition of the `--user` flag (you should not need `root` permissions to run this command):

    shell$ cd TOP_OF_OPEN_MPI_GIT_CLONE
    shell$ pip3 install --user -r docs/requirements.txt
    # Or: python3 -m pip install install -r docs/requirements.txt

This will install Sphinx and some Python modules required for building the Open MPI documentation in a user-specific location, likely somewhere under `$HOME`

You will likely need to find the location where `sphinx-build` was installed and add it to your `PATH` (e.g., on macOS, it might appear under `$HOME/Library/Python/PYTHON_VERSION/bin/sphinx-build`).

Note

On MacOS, look for `sphinx-build` under `$HOME/Library/Python/VERSION/bin` (where `VERSION` is the version number of Python). Or it may have installed to `/usr/local/bin/sphinx-build`. YMMV.

Important

You will need to ensure that Sphinx is in your `PATH` before running `configure`.

## 13.10.3. Running Sphinx

Open MPI’s build environment is setup to invoke Sphinx automatically; you should not need to invoke Sphinx manually.

Important

You will need to ensure that Sphinx is in your `PATH` before running `configure`.

As long as `configure` found Sphinx, `make` will invoke Sphinx to build the documentation. You can also run `make` directly in the `docs/` directory to build just the docs and skip building the rest of the Open MPI software. This can be a huge time-saver when iteratively writing, rendering, and viewing/proofing documentation.

Note

The fully-built HTML and man page docs are included in official Open MPI distribution tarballs. Meaning: if you download an Open MPI tarball from https://www.open-mpi.org/software/ompi (version v5.0.0 or later), the pre-built HTML and man page files are included in the tarball.

Sphinx is a requirement for developers who want to build the Open MPI docs. End users do not need to have Sphinx available to build Open MPI or have its docs installed from an official distribution tarball.

### 13.10.3.1. Sphinx execution time

The first time you invoke Sphinx on a clean tree, it takes a little time to render all the docs.

However, Sphinx is stateful: subsequent runs can be significantly faster because Sphinx will only re-render HTML files that have changes. This is an enormous time saver for Open MPI (e.g., if you are iterating over writing the docs and running `make` to see how they rendered in HTML).

Caution

Sphinx is only somewhat smart in its partial re-rendering. If you change a title in an RST file, for example, Sphinx will (by default) only re-render that page. The Tables of Contents / left hand navigation on other pages may not be updated.

You can always force a full re-render via:

    shell$ cd docs
    shell$ rm -rf _build
    shell$ make

### 13.10.3.2. Checking Sphinx HTML links

`make linkcheck` will invoke Sphinx’s functionality to check all the external links in the documentation:

    shell$ cd docs
    shell$ make linkcheck

Important

You will need to be on a computer that has good access to the internet when running this command.

### 13.10.3.3. Viewing docs locally

Once you have built the docs in your local Git clone, you can view them locally in the build tree:

1. Open `docs/_build/html/index.html` in a browser to view the HTML docs. For example, on MacOS, the following command opens the build tree docs in the default web browser:

       shell$ open docs/_build/html/index.html

2. Use the `man` command to view the Nroff files in `docs/_build/man` (you may need to use an absolute or relative filename to prevent `man` from using its search paths). For example:

       shell$ cd docs/_build/man
       shell$ man ./MPI_Send.3

Alternatively, you can view these files in their installed locations after running `make install`:

1. The HTML docs are installed (by default) to `$prefix/share/doc/openmpi/html`. You can use a web browser to open the `index.html` in that directory to view the docs locally. For example, on MacOS, the following command opens the installed docs in the default web browser:

       shell$ open $prefix/share/doc/openmpi/html/index.html

2. The man pages are installed (by default) to `$preix/share/man`. If your man page search path includes this location, you can invoke commands similar to the following to see the same content that you see in these HTML pages:

       shell$ man MPI_Send