Docker build
Containerized builds related to TREXIO library.
Producing manylinux wheels for Python API
Distributing binary wheels for Python packages that rely on C extensions is a non-trivial task. For more details, see the associated PEP 425 and PEP 600.
This issue is particularly tricky on Linux platforms. However, PyPA provides Docker
containers
that can be used as an isolated environment to produce binary wheels that are compatible with most Linux distributions.
Such wheels should contain manylinux
in their platform tag
(e.g. ...-manylinux_2_24_x86_64.whl
on 64-bit Intel with glibc >= 2.24
).
More technical details can be found in the corresponding GitHub repository.
This section summarizes the steps needed to build manylinux
-compatible wheels using the aforementioned containers.
Building the Docker containers
The primary TREXIO back end at the moment is based on the HDF5 library. Because of this, one has to build new Docker images from the PyPA ones. These images will contain the HDF5 library and will be used to produce wheels for the Python API.
To build the Docker images on x86_64 platform, execute the following:
cd hdf5-on-docker/ && ./build_images.sh
This should produce several images tagged with hdf5_1_12_
prefix and _x86_64
suffix.
These images inherit from the PyPA manylinux containers.
All available images can be listed using docker image list
command.
Building the manylinux wheels
First, make sure that you have the source code distribution
(e.g. trexio-0.2.0.tar.gz
) of the Python API in the current directory.
Then run one of the previously produced containers in the interactive mode using the following command:
docker run --rm -it -e PLAT=manylinux2014_x86_64 -v `pwd`:/tmp hdf5_1_12_on_2014_x86_64 /bin/bash
where 2014_x86_64
can be replaced with any other available platform suffix (e.g. 2010_x86_64
or 2_24_x86_64
)
The docker run
command line arguments used here:
-i
(run the docker container in interactive mode)--rm
(remove the container upon exit)-v `pwd`:/tmp
(mount current directory into thetmp
directory on the container-e
(set the environment variables according to the provided list)hdf5_1_12_on_2014_x86_64
(name of the Docker image to run)/bin/bash
(which binary the container should execute)
To run the ARM-based container (e.g. with _aarch64
suffix) on Intel/AMD processor, just add the --platform linux/arm64
to the
docker run
arguments.
Once the Docker container is launched and the corresponding prompt is switched to the container, run the following (example for release 0.2.0):
cd tmp/ && ./build_manylinux_wheels.sh trexio-0.2.0.tar.gz
This script creates virtual envirionments for several versions of CPython
(e.g. 3.7, 3.8, 3.9),
installs all requirements,
produces trexio
wheels with conventional linux_x86_64
tag and
repairs them to be tagged with manylinux
using the auditwheel
tool from PyPA
The produced wheels with the manylinux
platfrom tag can be found in trexio-0.2.0/wheelhouse
directory.
Exporting the wheels
You may want to produce wheels for several versions of glibc
.
Prior to running a new docker container, make sure to rename/move the wheelhouse
directory.
Otherwise, the build_manylinux_wheels.sh
script will crush.