Install an explicit version of wheel rather than latest (#1007)

Before:
- if `wheel` was not already installed, then `get-pip.py` would
  automatically install the latest version on PyPI, which is `0.34.2`
  (or `0.33.6` for Python 3.4).
- if `wheel` was already installed, then it was left unchanged
  regardless of the version installed.

Now:
- if `wheel` is not already installed, then the same versions will be
  installed as before, except these versions are pinned and will now not
  change unexpectedly after future `wheel` releases.
- if `wheel` is already installed, then it's upgraded/downgraded to the
  target version as needed.

Partly addresses #1000, though this change only helps builds where the
pip/setuptools/wheel install flow is triggered (currently only new apps
or ones where Python was purged or pip was not the correct version).

Since the wheel version is now known, it's output to the build log to
ease debugging and for parity with pip/setuptools.

The rest of #1000 will be fixed in later commits.
This commit is contained in:
Ed Morley
2020-07-29 00:11:04 +01:00
parent 46581612fc
commit 2097eab028
4 changed files with 17 additions and 14 deletions
+5 -3
View File
@@ -138,10 +138,12 @@ fi
PIP_VERSION='20.0.2'
SETUPTOOLS_VERSION='39.0.1'
WHEEL_VERSION='0.34.2'
if [[ "${PYTHON_VERSION}" == ${PY34}* ]]; then
# Python 3.4 support was dropped in pip 19.2+.
# Python 3.4 support was dropped in pip 19.2+ and wheel 0.34.0+.
PIP_VERSION='19.1.1'
WHEEL_VERSION='0.33.6'
fi
if [[ -f "$BUILD_DIR/Pipfile" ]]; then
@@ -163,13 +165,13 @@ fi
# If a new Python has been installed or Pip isn't up to date:
if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *${PIP_VERSION}* ]]; then
puts-step "Installing pip ${PIP_VERSION} and setuptools ${SETUPTOOLS_VERSION}"
puts-step "Installing pip ${PIP_VERSION}, setuptools ${SETUPTOOLS_VERSION} and wheel ${WHEEL_VERSION}"
# Remove old installations.
rm -fr /app/.heroku/python/lib/python*/site-packages/pip-*
rm -fr /app/.heroku/python/lib/python*/site-packages/setuptools-*
/app/.heroku/python/bin/python "$GETPIP_PY" pip=="${PIP_VERSION}" "setuptools==${SETUPTOOLS_VERSION}" &> /dev/null
/app/.heroku/python/bin/python "$GETPIP_PY" pip=="${PIP_VERSION}" "setuptools==${SETUPTOOLS_VERSION}" "wheel==${WHEEL_VERSION}" &> /dev/null
fi
set -e