From ef4f065652bf4345e0b80843979fc8bb1894292f Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 27 Jan 2023 12:55:04 -0500 Subject: [PATCH] ARM Dockerfile PyArrow Update --- docker/1.0-1/base/Dockerfile_arm.cpu | 10 ++++++++-- docker/1.0-1/resources/libffi7_3.3-6_arm64.deb | Bin 0 -> 20648 bytes 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 docker/1.0-1/resources/libffi7_3.3-6_arm64.deb diff --git a/docker/1.0-1/base/Dockerfile_arm.cpu b/docker/1.0-1/base/Dockerfile_arm.cpu index 84c3ba2..2a840fc 100644 --- a/docker/1.0-1/base/Dockerfile_arm.cpu +++ b/docker/1.0-1/base/Dockerfile_arm.cpu @@ -7,8 +7,9 @@ ARG MINICONDA_VERSION=4.9.2 # Upgraded version ARG CONDA_PY_VERSION=38 ARG CONDA_PKG_VERSION=4.10.1 ARG PYTHON_VERSION=3.8.13 -ARG PYARROW_VERSION=1.0.0 -ARG MLIO_VERSION=arch-agnostic +ARG PYARROW_VERSION=10.0.1 +ARG MLIO_VERSION=v0.8.0 +ARG NUMPY_VERSION=1.24.1 # Install python and other scikit-learn runtime dependencies # Dependency list from http://scikit-learn.org/stable/developers/advanced_installation.html#installing-build-dependencies @@ -66,6 +67,10 @@ RUN apt-get update && \ rm /etc/apt/trusted.gpg.d/kitware.gpg && \ rm -rf /var/lib/apt/lists/* +# http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi7_3.3-6_arm64.deb +COPY docker/1.0-1/resources/libffi7_3.3-6_arm64.deb /tmp +RUN dpkg -i /tmp/libffi7_3.3-6_arm64.deb + RUN cd /tmp && \ curl -L --output /tmp/Miniconda3.sh https://repo.anaconda.com/miniconda/Miniconda3-py${CONDA_PY_VERSION}_${MINICONDA_VERSION}-Linux-aarch64.sh && \ bash /tmp/Miniconda3.sh -bfp /miniconda3 && \ @@ -84,6 +89,7 @@ RUN echo "conda ${CONDA_PKG_VERSION}" >> /miniconda3/conda-meta/pinned && \ conda install -c conda-forge python=${PYTHON_VERSION} && \ conda install conda=${CONDA_PKG_VERSION} && \ conda update -y conda && \ + conda install -c conda-forge numpy=${NUMPY_VERSION} && \ conda install -c conda-forge pyarrow=${PYARROW_VERSION} && \ cd /tmp && \ git clone --branch ${MLIO_VERSION} https://github.com/awslabs/ml-io.git mlio && \ diff --git a/docker/1.0-1/resources/libffi7_3.3-6_arm64.deb b/docker/1.0-1/resources/libffi7_3.3-6_arm64.deb new file mode 100644 index 0000000000000000000000000000000000000000..c10a8398f1e303737b7e936c66edbb0f21177b4b GIT binary patch literal 20648 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