diff --git a/bin/steps/python b/bin/steps/python
index 32a25903da0262cbda9914a8bb643cc015b8c5d8..908d1b27d7ae5ce4ed70f429f3e6589f959f9ae7 100755
--- a/bin/steps/python
+++ b/bin/steps/python
@@ -4,7 +4,11 @@ set +e
 runtime-fixer runtime.txt
 PYTHON_VERSION=$(cat runtime.txt)
 
-# Install Python.
+if [[ "$STACK" != "$CACHED_PYTHON_STACK" ]]; then
+    puts-step "Stack has changed from $CACHED_PYTHON_STACK to $STACK, clearing cache"
+    rm -fr .heroku/python-stack .heroku/python-version .heroku/python .heroku/vendor
+fi
+
 if [ -f .heroku/python-version ]; then
   if [ ! "$(cat .heroku/python-version)" = "$PYTHON_VERSION" ]; then
       puts-step "Found $(cat .heroku/python-version), removing"
@@ -14,12 +18,6 @@ if [ -f .heroku/python-version ]; then
   fi
 fi
 
-if [ ! "$STACK" = "$CACHED_PYTHON_STACK" ]; then
-    rm -fr .heroku/python .heroku/python-stack .heroku/vendor
-    unset SKIP_INSTALL
-fi
-
-
 if [ ! "$SKIP_INSTALL" ]; then
     puts-step "Installing $PYTHON_VERSION"
 
diff --git a/test/run b/test/run
index e125c13f4d4fab1fc05cd218bf03aecb4d2465c8..130b0e7bf5241d047474879d4cfa39af7a64ed2e 100755
--- a/test/run
+++ b/test/run
@@ -76,6 +76,15 @@ testSmartRequirements() {
   assertCapturedSuccess
 }
 
+testStackChange() {
+  local cache_dir="$(mktmpdir)"
+  mkdir -p "${cache_dir}/.heroku"
+  echo "different-stack" > "${cache_dir}/.heroku/python-stack"
+  compile "requirements-standard" "$cache_dir"
+  assertCaptured "clearing cache"
+  assertFile "$STACK" ".heroku/python-stack"
+  assertCapturedSuccess
+}
 
 
 pushd $(dirname 0) >/dev/null