94 lines
3.8 KiB
Docker
94 lines
3.8 KiB
Docker
# Dockerfile
|
|
# Pierre-André Noël, May 12th 2020
|
|
# Copyright © Element AI Inc. All rights reserved.
|
|
# Apache License, Version 2.0
|
|
#
|
|
# This builds `manylinux_2_28_x86_64` Python wheels for `pynini`, wrapping
|
|
# all its dependencies.
|
|
#
|
|
# This Dockerfile uses multi-stage builds; for more information, see:
|
|
# https://docs.docker.com/develop/develop-images/multistage-build/
|
|
#
|
|
# The recommended installation method for Pynini is through Conda-Forge. This gives Linux
|
|
# x86-64 users another option: installing a precompiled module from PyPI.
|
|
#
|
|
#
|
|
# To build wheels and run Pynini's tests, run:
|
|
#
|
|
# docker build --target=run-tests -t build-pynini-wheels .
|
|
#
|
|
# To extract the resulting wheels from the Docker image, run:
|
|
#
|
|
# docker run --rm -v `pwd`:/io build-pynini-wheels cp -r /wheelhouse /io
|
|
#
|
|
# Notice that this also generates Cython wheels.
|
|
#
|
|
# Then, `twine` (https://twine.readthedocs.io/en/latest/) can be used to
|
|
# publish the resulting Pynini wheels.
|
|
|
|
# ******************************************************
|
|
# *** All the following images are based on this one ***
|
|
# ******************************************************
|
|
#from quay.io/pypa/manylinux_2_28_x86_64 AS common
|
|
|
|
# ***********************************************************************
|
|
# *** Image providing all the requirements for building Pynini wheels ***
|
|
# ***********************************************************************
|
|
FROM harbor.4pd.io/inf/base-python3.8-ubuntu:1.1.0
|
|
|
|
# The versions we want in the wheels.
|
|
ENV FST_VERSION "1.8.3"
|
|
ENV PYNINI_VERSION "2.1.6"
|
|
|
|
# Location of OpenFst and Pynini.
|
|
ENV FST_DOWNLOAD_PREFIX "https://www.openfst.org/twiki/pub/FST/FstDownload"
|
|
ENV PYNINI_DOWNLOAD_PREFIX "https://www.opengrm.org/twiki/pub/GRM/PyniniDownload"
|
|
|
|
# Note that our certificates are not known to the version of wget available in this image.
|
|
|
|
# Gets and unpack OpenFst source.
|
|
RUN apt update && apt-get install -y wget gcc-9 g++-9 make && ln -s $(which gcc-9) /usr/bin/gcc && ln -s $(which g++-9) /usr/bin/g++
|
|
RUN cd /tmp \
|
|
&& wget -q --no-check-certificate "${FST_DOWNLOAD_PREFIX}/openfst-${FST_VERSION}.tar.gz" \
|
|
&& tar -xzf "openfst-${FST_VERSION}.tar.gz" \
|
|
&& rm "openfst-${FST_VERSION}.tar.gz"
|
|
|
|
# Compiles OpenFst.
|
|
RUN cd "/tmp/openfst-${FST_VERSION}" \
|
|
&& ./configure --enable-grm \
|
|
&& make --jobs 4 install \
|
|
&& rm -rd "/tmp/openfst-${FST_VERSION}"
|
|
|
|
# Gets and unpacks Pynini source.
|
|
RUN mkdir -p /src && cd /src \
|
|
&& wget -q --no-check-certificate "${PYNINI_DOWNLOAD_PREFIX}/pynini-${PYNINI_VERSION}.tar.gz" \
|
|
&& tar -xzf "pynini-${PYNINI_VERSION}.tar.gz" \
|
|
&& rm "pynini-${PYNINI_VERSION}.tar.gz"
|
|
|
|
# Installs requirements in all our Pythons.
|
|
RUN pip install -i https://nexus.4pd.io/repository/pypi-all/simple -r "/src/pynini-${PYNINI_VERSION}/requirements.txt" || exit;
|
|
|
|
|
|
# **********************************************************
|
|
# *** Image making pynini wheels (placed in /wheelhouse) ***
|
|
# **********************************************************
|
|
#FROM wheel-building-env AS build-wheels
|
|
|
|
# Compiles the wheels to a temporary directory.
|
|
RUN pip wheel -i https://nexus.4pd.io/repository/pypi-all/simple -v "/src/pynini-${PYNINI_VERSION}" -w /tmp/wheelhouse/ || exit;
|
|
|
|
RUN wget ftp://ftp.4pd.io/pub/pico/temp/patchelf-0.18.0-x86_64.tar.gz && tar xzf patchelf-0.18.0-x86_64.tar.gz && rm -f patchelf-0.18.0-x86_64.tar.gz
|
|
RUN pip install -i https://nexus.4pd.io/repository/pypi-all/simple auditwheel
|
|
# Bundles external shared libraries into the wheels.
|
|
# See https://github.com/pypa/manylinux/tree/manylinux2014
|
|
RUN for WHL in /tmp/wheelhouse/pynini*.whl; do \
|
|
PATH=$(pwd)/bin:$PATH auditwheel repair --plat manylinux_2_31_x86_64 "${WHL}" -w /wheelhouse/ || exit; \
|
|
done
|
|
#RUN mkdir -p /wheelhouse && for WHL in /tmp/wheelhouse/pynini*.whl; do \
|
|
# cp "${WHL}" /wheelhouse/; \
|
|
#done
|
|
|
|
# Removes the non-repaired wheels.
|
|
RUN rm -rd /tmp/wheelhouse
|
|
|