Add scripts to build python wheel for linux. (#2693)
* Add scripts to build python wheel for linux. Followed PEP513. * Fix dist check for new added files. * Update README for usage example.pull/3287/head
parent
12acbc2678
commit
176bac6dac
5 changed files with 121 additions and 0 deletions
@ -0,0 +1,6 @@ |
|||||||
|
FROM quay.io/pypa/manylinux1_x86_64 |
||||||
|
|
||||||
|
RUN yum install -y libtool |
||||||
|
RUN /opt/python/cp27-cp27mu/bin/pip install twine |
||||||
|
|
||||||
|
COPY protobuf_optimized_pip.sh / |
@ -0,0 +1,17 @@ |
|||||||
|
Description |
||||||
|
------------------------------ |
||||||
|
This directory is used to build released wheels according to PEP513 and upload |
||||||
|
them to pypi. |
||||||
|
|
||||||
|
Usage |
||||||
|
------------------------------ |
||||||
|
For example, to release 3.3.0: |
||||||
|
./protobuf_optimized_pip.sh 3.3.0 PYPI_USERNAME PYPI_PASSWORD |
||||||
|
|
||||||
|
Structure |
||||||
|
------------------------------ |
||||||
|
| Source | Source | |
||||||
|
|--------------------------------------|---------------------------------------------------| |
||||||
|
| protobuf_optimized_pip.sh | Entry point. Calling Dockerfile and build_wheel_manylinux.sh | |
||||||
|
| Dockerfile | Build docker image according to PEP513. | |
||||||
|
| build_wheel_manylinux.sh | Build wheel packages in the docker container. | |
@ -0,0 +1,27 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# Print usage and fail. |
||||||
|
function usage() { |
||||||
|
echo "Usage: protobuf_optimized_pip.sh PROTOBUF_VERSION PYPI_USERNAME PYPI_PASSWORD" >&2 |
||||||
|
exit 1 # Causes caller to exit because we use -e. |
||||||
|
} |
||||||
|
|
||||||
|
# Validate arguments. |
||||||
|
if [ $0 != ./build_wheel_manylinux.sh ]; then |
||||||
|
echo "Please run this script from the directory in which it is located." >&2 |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
if [ $# -lt 3 ]; then |
||||||
|
usage |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
PROTOBUF_VERSION=$1 |
||||||
|
PYPI_USERNAME=$2 |
||||||
|
PYPI_PASSWORD=$3 |
||||||
|
|
||||||
|
docker rmi protobuf-python-wheel |
||||||
|
docker build . -t protobuf-python-wheel |
||||||
|
docker run --rm protobuf-python-wheel ./protobuf_optimized_pip.sh $PROTOBUF_VERSION $PYPI_USERNAME $PYPI_PASSWORD |
||||||
|
docker rmi protobuf-python-wheel |
@ -0,0 +1,66 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
|
||||||
|
# DO NOT use this script manually! Called by docker. |
||||||
|
|
||||||
|
set -ex |
||||||
|
|
||||||
|
# Print usage and fail. |
||||||
|
function usage() { |
||||||
|
echo "Usage: protobuf_optimized_pip.sh PROTOBUF_VERSION PYPI_USERNAME PYPI_PASSWORD" >&2 |
||||||
|
exit 1 # Causes caller to exit because we use -e. |
||||||
|
} |
||||||
|
|
||||||
|
# Build wheel |
||||||
|
function build_wheel() { |
||||||
|
PYTHON_VERSION=$1 |
||||||
|
PYTHON_BIN=/opt/python/${PYTHON_VERSION}/bin/python |
||||||
|
|
||||||
|
$PYTHON_BIN setup.py bdist_wheel --cpp_implementation --compile_static_extension |
||||||
|
auditwheel repair dist/protobuf-${PROTOBUF_VERSION}-${PYTHON_VERSION}-linux_x86_64.whl |
||||||
|
} |
||||||
|
|
||||||
|
# Validate arguments. |
||||||
|
if [ $0 != ./protobuf_optimized_pip.sh ]; then |
||||||
|
echo "Please run this script from the directory in which it is located." >&2 |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
if [ $# -lt 3 ]; then |
||||||
|
usage |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
PROTOBUF_VERSION=$1 |
||||||
|
PYPI_USERNAME=$2 |
||||||
|
PYPI_PASSWORD=$3 |
||||||
|
|
||||||
|
DIR=${PWD}/'protobuf-python-build' |
||||||
|
PYTHON_VERSIONS=('cp27-cp27mu' 'cp33-cp33m' 'cp34-cp34m' 'cp35-cp35m' 'cp36-cp36m') |
||||||
|
|
||||||
|
mkdir -p ${DIR} |
||||||
|
cd ${DIR} |
||||||
|
curl -SsL -O https://github.com/google/protobuf/archive/v${PROTOBUF_VERSION}.tar.gz |
||||||
|
tar xzf v${PROTOBUF_VERSION}.tar.gz |
||||||
|
cd $DIR/protobuf-${PROTOBUF_VERSION} |
||||||
|
|
||||||
|
# Autoconf on centos 5.11 cannot recognize AC_PROG_OBJC. |
||||||
|
sed -i '/AC_PROG_OBJC/d' configure.ac |
||||||
|
sed -i 's/conformance\/Makefile//g' configure.ac |
||||||
|
|
||||||
|
# Build protoc |
||||||
|
./autogen.sh |
||||||
|
CXXFLAGS="-fPIC -g -O2" ./configure |
||||||
|
make -j8 |
||||||
|
export PROTOC=$DIR/src/protoc |
||||||
|
|
||||||
|
cd python |
||||||
|
|
||||||
|
for PYTHON_VERSION in "${PYTHON_VERSIONS[@]}" |
||||||
|
do |
||||||
|
build_wheel $PYTHON_VERSION |
||||||
|
done |
||||||
|
|
||||||
|
/opt/python/cp27-cp27mu/bin/twine upload wheelhouse/* <<! |
||||||
|
$PYPI_USERNAME |
||||||
|
$PYPI_PASSWORD |
||||||
|
! |
Loading…
Reference in new issue