Cannot compile MPI programs (mpi.h missing)

We are using the docker image opensuse/tumbleweed:latest regularly for testing scientific software (scheduled CI), which needs a working MPI environment. In particular we are used to install mpi4py. This stopped working roughly a month ago. Here is the code we run in the container:

zypper refresh
zypper install -y python3 python3-devel
zypper install -y python3-pip python3-virtualenv
zypper install -y gcc-fortran gcc
zypper install -y blas-devel lapack-devel 
zypper install -y openmpi openmpi-devel
zypper install -y libgomp1
python3 -m venv /opensuse_latest/venv
export PATH="/opensuse_latest/venv/bin:$PATH"
export OMPI_ALLOW_RUN_AS_ROOT=1
export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
export OMPI_MCA_pml=ob1
export OMPI_MCA_btl=tcp,self
export PATH="/usr/lib64/mpi/gcc/openmpi4/bin/:$PATH"
export LD_LIBRARY_PATH="/usr/lib64/mpi/gcc/openmpi4/lib64:$LD_LIBRARY_PATH"
source /opensuse_latest/venv/bin/activate
pip install mpi4py

Recently, this yields the following error:

Building wheel for mpi4py (pyproject.toml) did not run successfully.
  β”‚ exit code: 1
  ╰─> [92 lines of output]
      /tmp/pip-build-env-xvdn07m6/overlay/lib/python3.13/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
      !!
      
              ********************************************************************************
              Please consider removing the following classifiers in favor of a SPDX license expression:
      
              License :: OSI Approved :: BSD License
      
              See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
              ********************************************************************************
      
      !!
        self._finalize_license_expression()
      running bdist_wheel
      running build
      running build_src
      using Cython 3.0.12
      cythonizing 'src/mpi4py/MPI.pyx' -> 'src/mpi4py/MPI.c'
      running build_py
      creating build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/bench.py -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/typing.py -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/__main__.py -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/run.py -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/__init__.py -> build/lib.linux-x86_64-cpython-313/mpi4py
      creating build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/util.py -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/pool.py -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/aplus.py -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/_core.py -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/__main__.py -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/_base.py -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/server.py -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/__init__.py -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      creating build/lib.linux-x86_64-cpython-313/mpi4py/util
      copying src/mpi4py/util/dtlib.py -> build/lib.linux-x86_64-cpython-313/mpi4py/util
      copying src/mpi4py/util/pool.py -> build/lib.linux-x86_64-cpython-313/mpi4py/util
      copying src/mpi4py/util/sync.py -> build/lib.linux-x86_64-cpython-313/mpi4py/util
      copying src/mpi4py/util/pkl5.py -> build/lib.linux-x86_64-cpython-313/mpi4py/util
      copying src/mpi4py/util/__init__.py -> build/lib.linux-x86_64-cpython-313/mpi4py/util
      copying src/mpi4py/typing.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/run.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/bench.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/__main__.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/__init__.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/MPI.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/py.typed -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/libmpi.pxd -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/MPI.pxd -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/__init__.pxd -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/MPI_api.h -> build/lib.linux-x86_64-cpython-313/mpi4py
      copying src/mpi4py/MPI.h -> build/lib.linux-x86_64-cpython-313/mpi4py
      creating build/lib.linux-x86_64-cpython-313/mpi4py/include/mpi4py
      copying src/mpi4py/include/mpi4py/pycapi.h -> build/lib.linux-x86_64-cpython-313/mpi4py/include/mpi4py
      copying src/mpi4py/include/mpi4py/mpi4py.h -> build/lib.linux-x86_64-cpython-313/mpi4py/include/mpi4py
      copying src/mpi4py/include/mpi4py/mpi4py.i -> build/lib.linux-x86_64-cpython-313/mpi4py/include/mpi4py
      copying src/mpi4py/include/mpi4py/mpi.pxi -> build/lib.linux-x86_64-cpython-313/mpi4py/include/mpi4py
      copying src/mpi4py/util/sync.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/util
      copying src/mpi4py/util/pkl5.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/util
      copying src/mpi4py/util/dtlib.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/util
      copying src/mpi4py/util/pool.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/util
      copying src/mpi4py/util/__init__.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/util
      copying src/mpi4py/futures/_core.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/util.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/aplus.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/__main__.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/pool.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/_base.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/__init__.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      copying src/mpi4py/futures/server.pyi -> build/lib.linux-x86_64-cpython-313/mpi4py/futures
      running build_ext
      MPI configuration: [mpi] from 'mpi.cfg'
      checking for MPI compile and link ...
      gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -O2 -Wall -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g -DOPENSSL_LOAD_CONF -fwrapv -fno-semantic-interposition -O2 -Wall -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g -IVendor/ -O2 -Wall -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -g -IVendor/ -fPIC -I/opensuse_latest/venv/include -I/usr/include/python3.13 -c _configtest.c -o _configtest.o
      _configtest.c:2:10: fatal error: mpi.h: No such file or directory
          2 | #include <mpi.h>
            |          ^~~~~~~
      compilation terminated.
      failure.
      removing: _configtest.c _configtest.o
      error: Cannot compile MPI programs. Check your configuration!!!
      Installing mpi4py requires a working MPI implementation.
      If you are running on a supercomputer or cluster, check with
      the system administrator or refer to the system user guide.
      Otherwise, if you are running on a laptop or desktop computer,
      your may be missing the MPICH or Open MPI development package:
      * On Fedora/RHEL systems, run:
        $ sudo dnf install mpich-devel     # for MPICH
        $ sudo dnf install openmpi-devel   # for Open MPI
      * On Debian/Ubuntu systems, run:
        $ sudo apt install libmpich-dev    # for MPICH
        $ sudo apt install libopenmpi-dev  # for Open MPI
      [end of output]

The last pipeline where these commands were working that I found showed the following hashes:
Using docker image sha256:1e2b1c442ee8ef58fd6bdeda213ed92362c372178aa2285e18c8c3345d5adf4f for opensuse/tumbleweed:latest with digest opensuse/tumbleweed@sha256:d9d5ff2d8aeb763405162bd93ac3b62bb0c563e004903b5c07f78236e1c2ff6f
Any help is much appreciated - thx!

* On Fedora/RHEL systems, run:
        $ sudo dnf install mpich-devel     # for MPICH
        $ sudo dnf install openmpi-devel   # for Open MPI

Seems like it’s telling you exactly what to do.

πŸ“¦ tumbleweed ~ % zypper se openmpi      
  | openmpi4-devel                                    | SDK for openMPI  version 4.1.8                  | package
  | openmpi5-devel                                    | SDK for openMPI  version 5.0.7                  | package

^^^ Very Truncated output, for reasons

πŸ“¦ tumbleweed ~ % zypper se mpich-devel
Loading repository data...
Reading installed packages...

S  | Name                          | Summary                                                            | Type
---+-------------------------------+--------------------------------------------------------------------+--------
   | adios2-mpich-devel            | Development files for adios2-mpich                                 | package
   | diy-mpich-devel               | A block-parallel library                                           | package
   | hypre-mpich-devel             | Headers and library links for libHYPRE2_20_0-mpich                 | package
   | mpich-devel                   | SDK for MPICH  version 4.3.0                                       | package
   | pnetcdf-mpich-devel           | Development files for pnetcdf-mpich                                | package
   | pnetcdf-mpich-devel-static    | Static development files for pnetcdf-mpich                         | package
   | ptscotch-mpich-devel          | Development libraries for scotch                                   | package
   | ptscotch-mpich-devel-static   | Development libraries for scotch                                   | package
   | ptscotch-parmetis-mpich-devel | Development libraries for scotch                                   | package
   | vtk-m-mpich-devel             | Visualization ToolKit for Many-cores (vtk-m) development libraries | package
1 Like

Thx a lot @sfalken, indeed zypper install -y openmpi4-devel solved the issue. Best,

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.