Skip to content
Snippets Groups Projects
run-pip-tests 4.03 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env bash
    
    #
    # 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.
    #
    
    # Stop on error
    set -e
    # Set nullglob for when we are checking existence based on globs
    shopt -s nullglob
    
    FWDIR="$(cd "$(dirname "$0")"/..; pwd)"
    cd "$FWDIR"
    
    echo "Constucting virtual env for testing"
    VIRTUALENV_BASE=$(mktemp -d)
    
    # Clean up the virtual env enviroment used if we created one.
    function delete_virtualenv() {
      echo "Cleaning up temporary directory - $VIRTUALENV_BASE"
      rm -rf "$VIRTUALENV_BASE"
    }
    trap delete_virtualenv EXIT
    
    # Some systems don't have pip or virtualenv - in those cases our tests won't work.
    if ! hash virtualenv 2>/dev/null; then
      echo "Missing virtualenv skipping pip installability tests."
      exit 0
    fi
    if ! hash pip 2>/dev/null; then
      echo "Missing pip, skipping pip installability tests."
      exit 0
    fi
    
    # Figure out which Python execs we should test pip installation with
    PYTHON_EXECS=()
    if hash python2 2>/dev/null; then
      # We do this since we are testing with virtualenv and the default virtual env python
      # is in /usr/bin/python
      PYTHON_EXECS+=('python2')
    elif hash python 2>/dev/null; then
      # If python2 isn't installed fallback to python if available
      PYTHON_EXECS+=('python')
    fi
    if hash python3 2>/dev/null; then
      PYTHON_EXECS+=('python3')
    fi
    
    # Determine which version of PySpark we are building for archive name
    PYSPARK_VERSION=$(python -c "exec(open('python/pyspark/version.py').read());print __version__")
    PYSPARK_DIST="$FWDIR/python/dist/pyspark-$PYSPARK_VERSION.tar.gz"
    # The pip install options we use for all the pip commands
    PIP_OPTIONS="--upgrade --no-cache-dir --force-reinstall "
    # Test both regular user and edit/dev install modes.
    PIP_COMMANDS=("pip install $PIP_OPTIONS $PYSPARK_DIST"
    	      "pip install $PIP_OPTIONS -e python/")
    
    for python in "${PYTHON_EXECS[@]}"; do
      for install_command in "${PIP_COMMANDS[@]}"; do
        echo "Testing pip installation with python $python"
        # Create a temp directory for us to work in and save its name to a file for cleanup
        echo "Using $VIRTUALENV_BASE for virtualenv"
        VIRTUALENV_PATH="$VIRTUALENV_BASE"/$python
        rm -rf "$VIRTUALENV_PATH"
        mkdir -p "$VIRTUALENV_PATH"
        virtualenv --python=$python "$VIRTUALENV_PATH"
        source "$VIRTUALENV_PATH"/bin/activate
    
        # Upgrade pip & friends
        pip install --upgrade pip pypandoc wheel
        pip install numpy # Needed so we can verify mllib imports
    
    
        echo "Creating pip installable source dist"
        cd "$FWDIR"/python
    
        # Delete the egg info file if it exists, this can cache the setup file.
        rm -rf pyspark.egg-info || echo "No existing egg info file, skipping deletion"
    
        $python setup.py sdist
    
    
        echo "Installing dist into virtual env"
        cd dist
        # Verify that the dist directory only contains one thing to install
        sdists=(*.tar.gz)
        if [ ${#sdists[@]} -ne 1 ]; then
          echo "Unexpected number of targets found in dist directory - please cleanup existing sdists first."
          exit -1
        fi
        # Do the actual installation
        cd "$FWDIR"
        $install_command
    
        cd /
    
        echo "Run basic sanity check on pip installed version with spark-submit"
        spark-submit "$FWDIR"/dev/pip-sanity-check.py
        echo "Run basic sanity check with import based"
        python "$FWDIR"/dev/pip-sanity-check.py
        echo "Run the tests for context.py"
        python "$FWDIR"/python/pyspark/context.py
    
        cd "$FWDIR"
    
      done
    done
    
    exit 0