1
0
mirror of https://github.com/TREX-CoE/trexio.git synced 2024-12-30 16:15:54 +01:00
trexio/docker
2022-01-07 11:03:00 +01:00
..
hdf5-on-docker add Docker files and bash scripts to build HDF5 1.12 in manylinux containers 2021-09-16 15:31:11 +02:00
.gitignore add gitignore 2021-09-13 14:54:25 +02:00
README.md minor update for better Python builds 2021-10-01 10:48:13 +02:00

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 the tmp 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.