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!