-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Expand file tree
/
Copy pathbuild_python_wheel.sh
More file actions
executable file
·101 lines (85 loc) · 3.07 KB
/
Copy pathbuild_python_wheel.sh
File metadata and controls
executable file
·101 lines (85 loc) · 3.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/bash
# Copyright 2018 Google LLC
#
# Licensed 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
#
# https://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 a **single** Python wheel for a specified version. The version and
# associated paths should be set as environment variables; the expected
# environment variables will be verified below.
set -e -x
# Check that the REPO_ROOT, PY_BIN and PY_TAG environment variables are set.
if [[ -z "${REPO_ROOT}" ]]; then
echo "REPO_ROOT environment variable should be set by the caller."
exit 1
fi
if [[ -z "${PY_BIN}" ]]; then
echo "PY_BIN environment variable should be set by the caller."
exit 1
fi
if [[ -z "${PY_TAG}" ]]; then
echo "PY_TAG environment variable should be set by the caller."
exit 1
fi
# set up pyenv & shell environment for switching across python versions
eval "$(pyenv init -)"
eval "$(pyenv init --path)"
install_python_pyenv() {
version=$1
escaped_version="${version//./\.}"
if [ -z "$(pyenv versions --bare | grep "^${escaped_version}\b")" ]; then
echo "Python $version is not installed. Installing..."
pyenv install $version
echo "Python $version installed."
else
echo "Python $version is already installed."
fi
pyenv shell $version
}
install_python_pyenv ${PY_BIN}
# Rely on the REPO_ROOT already provided by the parent script
OSX_DIR="${REPO_ROOT}/scripts/osx"
# Create a virtualenv where we can install Python build dependencies.
VENV=${REPO_ROOT}/venv${PY_BIN}
"python${PY_BIN}" -m venv ${VENV}
curl https://bootstrap.pypa.io/pip/3.9/get-pip.py | ${VENV}/bin/python
${VENV}/bin/python -m pip install \
--requirement ${REPO_ROOT}/scripts/dev-requirements.txt
# Create the wheel.
DIST_WHEELS="${REPO_ROOT}/dist_wheels"
mkdir -p ${DIST_WHEELS}
cd ${REPO_ROOT}
${VENV}/bin/python setup.py build_ext \
--include-dirs=${REPO_ROOT}/usr/include \
--library-dirs=${REPO_ROOT}/usr/lib \
--rpath=${REPO_ROOT}/usr/lib
${VENV}/bin/python -m pip wheel ${REPO_ROOT} --wheel-dir ${DIST_WHEELS}
# Delocate the wheel.
FIXED_WHEELS="${REPO_ROOT}/wheels"
mkdir -p ${FIXED_WHEELS}
${VENV}/bin/delocate-wheel \
--wheel-dir ${FIXED_WHEELS} \
--verbose \
--check-archs \
${DIST_WHEELS}/google_crc32c*${PY_TAG}*.whl
if [[ "${PUBLISH_WHEELS}" == "true" ]]; then
. /${OSX_DIR}/publish_python_wheel.sh
fi
# test wheel
${VENV}/bin/pip install \
--no-index --find-links=${REPO_ROOT}/wheels google-crc32c --force-reinstall
${VENV}/bin/pip install pytest
${VENV}/bin/py.test ${REPO_ROOT}/tests
${VENV}/bin/python ${REPO_ROOT}/scripts/check_crc32c_extension.py
ls ${REPO_ROOT}/wheels/
# Clean up.
rm -fr ${DIST_WHEELS}
rm -fr ${VENV}