Skip to content
Snippets Groups Projects
python 2.12 KiB
set +e
PYTHON_VERSION=$(cat runtime.txt)

# Install Python.
if [ -f .heroku/python-version ]; then
  if [ ! $(cat .heroku/python-version) = $PYTHON_VERSION ]; then
    bpwatch start uninstall_python
      puts-step "Found $(cat .heroku/python-version), removing"
      rm -fr .heroku/python
    bpwatch stop uninstall_python
  else
    SKIP_INSTALL=1
  fi
fi

if [ ! $STACK = $CACHED_PYTHON_STACK ]; then
  bpwatch start uninstall_python
    rm -fr .heroku/python .heroku/python-stack .heroku/vendor
    unset SKIP_INSTALL
  bpwatch stop uninstall_python
fi


if [ ! "$SKIP_INSTALL" ]; then
  bpwatch start install_python
    puts-step "Installing $PYTHON_VERSION"

    # Prepare destination directory.
    mkdir -p .heroku/python

    curl https://lang-python.s3.amazonaws.com/$STACK/runtimes/$PYTHON_VERSION.tar.gz -s | tar zxv -C .heroku/python &> /dev/null
    if [[ $? != 0 ]] ; then
      puts-warn "Requested runtime ($PYTHON_VERSION) is not available for this stack ($STACK)."
      puts-warn "Aborting.  More info: https://devcenter.heroku.com/articles/python-support"
      exit 1
    fi

  bpwatch stop install_python

  # Record for future reference.
  echo $PYTHON_VERSION > .heroku/python-version
  echo $STACK > .heroku/python-stack
  FRESH_PYTHON=true

  hash -r
fi

# If Pip isn't up to date:
if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_VERSION* ]]; then
  WORKING_DIR=$(pwd)

  bpwatch start prepare_environment

  TMPTARDIR=$(mktemp -d)
  trap "rm -rf $TMPTARDIR" RETURN

  bpwatch start install_setuptools
    # Prepare it for the real world
    puts-step "Installing Setuptools ($SETUPTOOLS_VERSION)"
    tar zxf $ROOT_DIR/vendor/setuptools-$SETUPTOOLS_VERSION.tar.gz -C $TMPTARDIR
    cd $TMPTARDIR/setuptools-$SETUPTOOLS_VERSION/
    python setup.py install &> /dev/null
    cd $WORKING_DIR
  bpwatch stop install_setuptoools

  bpwatch start install_pip
    puts-step "Installing Pip ($PIP_VERSION)"
    tar zxf $ROOT_DIR/vendor/pip-$PIP_VERSION.tar.gz -C $TMPTARDIR
    cd $TMPTARDIR/pip-$PIP_VERSION/
    python setup.py install
    cd $WORKING_DIR

  bpwatch stop install_pip
  bpwatch stop prepare_environment
fi

set -e
hash -r