blob: 4ae4b660ea014a59eecc187e17da4f166a0e9981 [file] [log] [blame]
#!/bin/bash -e
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# Build upon the scripts in https://github.com/matthew-brett/manylinux-builds
# * Copyright (c) 2013-2016, Matt Terry and Matthew Brett (BSD 2-clause)
PYTHON_VERSIONS="${PYTHON_VERSIONS:-2.7,16 2.7,32 3.5,16 3.6,16, 3.7,16}"
source /multibuild/manylinux_utils.sh
for PYTHON_TUPLE in ${PYTHON_VERSIONS}; do
IFS=","
set -- $PYTHON_TUPLE;
PYTHON=$1
U_WIDTH=$2
PYTHON_INTERPRETER="$(cpython_path $PYTHON ${U_WIDTH})/bin/python"
PIP="$(cpython_path $PYTHON ${U_WIDTH})/bin/pip"
PATH="$PATH:$(cpython_path $PYTHON ${U_WIDTH})"
echo "=== (${PYTHON}, ${U_WIDTH}) Installing build dependencies ==="
$PIP install "numpy==1.14.5" "cython==0.29.8" "virtualenv==16.3.0"
# Pandas requires numpy and cython
$PIP install "pandas==0.24.0"
# TensorFlow is not supported for Python 2.7 with unicode width 16 or with Python 3.7
if [ $PYTHON != "2.7" ] || [ $U_WIDTH = "32" ]; then
if [ $PYTHON != "3.7" ]; then
$PIP install "tensorflow==1.11.0" "Keras-Preprocessing==1.0.5"
fi
fi
echo "=== (${PYTHON}, ${U_WIDTH}) Preparing virtualenv for tests ==="
"$(cpython_path $PYTHON ${U_WIDTH})/bin/virtualenv" -p ${PYTHON_INTERPRETER} --no-download /venv-test-${PYTHON}-${U_WIDTH}
source /venv-test-${PYTHON}-${U_WIDTH}/bin/activate
pip install pytest pytest-faulthandler hypothesis 'numpy==1.14.5' 'pandas==0.24.0'
deactivate
done
# Remove debug symbols from libraries that were installed via wheel.
find /venv-test-*/lib/*/site-packages/pandas -name '*.so' -exec strip '{}' ';'
find /venv-test-*/lib/*/site-packages/numpy -name '*.so' -exec strip '{}' ';'
find /opt/_internal/cpython-*/lib/*/site-packages/pandas -name '*.so' -exec strip '{}' ';'
find /opt/_internal/cpython-*/lib/*/site-packages/tensorflow -name '*.so' -exec strip '{}' ';'
# Only Python 3.6+ packages are stripable as they are built inside of the image
find /opt/_internal/cpython-3.6.*/lib/python3.6/site-packages/numpy -name '*.so' -exec strip '{}' ';'
find /opt/_internal/cpython-3.7.*/lib/python3.7/site-packages/numpy -name '*.so' -exec strip '{}' ';'
find /opt/_internal/*/lib/*/site-packages/Cython -name '*.so' -exec strip '{}' ';'
# Remove pip cache again. It's useful during the virtualenv creation but we
# don't want it persisted in the docker layer, ~264MiB
rm -rf /root/.cache
# Remove pandas' tests module as it includes a lot of data, ~27MiB per Python
# venv, i.e. 216MiB in total
rm -rf /opt/_internal/*/lib/*/site-packages/pandas/tests
rm -rf /venv-test-*/lib/*/site-packages/pandas/tests
# Remove unused Python versions
rm -rf /opt/_internal/cpython-3.4*