From fcd04ec121664de621ceb874c44eab5fbdc6bbd7 Mon Sep 17 00:00:00 2001 From: Matt Kwong Date: Fri, 4 May 2018 12:00:25 -0700 Subject: [PATCH] Remove the fallback when creating Python virtual env See https://github.com/grpc/grpc/issues/15253 for more context. The original behavior when running Python tests is to try to create a virtual env with the specifed Python version. If there is an issue with that, fallback to the system's default Python version. This leads to misleading test results, so removing the fallback and failing the test when virtual env fails to instantiate the specified Python version is the new behavior. --- .../test/python_jessie_x64/Dockerfile.template | 4 ++++ .../dockerfile/test/python_jessie_x64/Dockerfile | 4 ++++ tools/run_tests/helper_scripts/build_python.sh | 15 +++------------ 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/templates/tools/dockerfile/test/python_jessie_x64/Dockerfile.template b/templates/tools/dockerfile/test/python_jessie_x64/Dockerfile.template index dba6a227f2b..e73b839a284 100644 --- a/templates/tools/dockerfile/test/python_jessie_x64/Dockerfile.template +++ b/templates/tools/dockerfile/test/python_jessie_x64/Dockerfile.template @@ -19,6 +19,10 @@ <%include file="../../apt_get_basic.include"/> <%include file="../../gcp_api_libraries.include"/> <%include file="../../python_deps.include"/> + # Install pip and virtualenv for Python 3.4 + RUN curl https://bootstrap.pypa.io/get-pip.py | python3.4 + RUN python3.4 -m pip install virtualenv + <%include file="../../run_tests_addons.include"/> # Define the default command. CMD ["bash"] diff --git a/tools/dockerfile/test/python_jessie_x64/Dockerfile b/tools/dockerfile/test/python_jessie_x64/Dockerfile index 41b670c06c6..bd9d55ed8a2 100644 --- a/tools/dockerfile/test/python_jessie_x64/Dockerfile +++ b/tools/dockerfile/test/python_jessie_x64/Dockerfile @@ -68,6 +68,10 @@ RUN pip install --upgrade pip==10.0.1 RUN pip install virtualenv RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.2.post1 six==1.10.0 twisted==17.5.0 +# Install pip and virtualenv for Python 3.4 +RUN curl https://bootstrap.pypa.io/get-pip.py | python3.4 +RUN python3.4 -m pip install virtualenv + # Prepare ccache RUN ln -s /usr/bin/ccache /usr/local/bin/gcc RUN ln -s /usr/bin/ccache /usr/local/bin/g++ diff --git a/tools/run_tests/helper_scripts/build_python.sh b/tools/run_tests/helper_scripts/build_python.sh index b0a6f0f4d4d..cdcb2aa116e 100755 --- a/tools/run_tests/helper_scripts/build_python.sh +++ b/tools/run_tests/helper_scripts/build_python.sh @@ -112,10 +112,6 @@ export CFLAGS="-I$ROOT/include -std=gnu99 -fno-wrapv $CFLAGS" export GRPC_PYTHON_BUILD_WITH_CYTHON=1 export LANG=en_US.UTF-8 -# Default python on the host to fall back to when instantiating e.g. the -# virtualenv. -HOST_PYTHON=${HOST_PYTHON:-python} - # If ccache is available on Linux, use it. if [ "$(is_linux)" ]; then # We're not on Darwin (Mac OS X) @@ -132,14 +128,9 @@ fi # Perform build operations # ############################ -# Instantiate the virtualenv, preferring to do so from the relevant python -# version. Even if these commands fail (e.g. on Windows due to name conflicts) -# it's possible that the virtualenv is still usable and we trust the tester to -# be able to 'figure it out' instead of us e.g. doing potentially expensive and -# unnecessary error recovery by `rm -rf`ing the virtualenv. -($PYTHON -m virtualenv "$VENV" || - $HOST_PYTHON -m virtualenv -p "$PYTHON" "$VENV" || - true) +# Instantiate the virtualenv from the Python version passed in. +$PYTHON -m pip install virtualenv +$PYTHON -m virtualenv "$VENV" VENV_PYTHON=$(script_realpath "$VENV/$VENV_RELATIVE_PYTHON") # See https://github.com/grpc/grpc/issues/14815 for more context. We cannot rely