diff --git a/bin/compile b/bin/compile
index d81772ea55f1540a322e5d80979846bbae194d99..6dd4f8b50c29b21c01876c37226750df45304499 100755
--- a/bin/compile
+++ b/bin/compile
@@ -20,7 +20,7 @@ CACHE_DIR=$2
 ENV_DIR=$3
 
 
-CACHED_DIRS=".heroku"
+CACHE_ENTRIES=".heroku/python .heroku/python-stack .heroku/python-version"
 
 # Static configurations for virtualenv caches.
 VIRTUALENV_LOC=".heroku/venv"
@@ -145,8 +145,9 @@ bpwatch stop clear_old_venvs
 
 # Restore old artifacts from the cache.
 bpwatch start restore_cache
-  for dir in $CACHED_DIRS; do
-    cp -R $CACHE_DIR/$dir . &> /dev/null || true
+  for dir in $CACHE_ENTRIES; do
+    mkdir -p $(basename $dir)
+    cp -R $CACHE_DIR/$dir $dir &> /dev/null || true
   done
 bpwatch stop restore_cache
 
@@ -209,9 +210,10 @@ bpwatch stop post_compile
 
 # Store new artifacts in cache.
 bpwatch start dump_cache
-  for dir in $CACHED_DIRS; do
+  for dir in $CACHE_ENTRIES; do
     rm -rf $CACHE_DIR/$dir
-    cp -R $dir $CACHE_DIR/
+    mkdir -p $(dirname $CACHE_DIR/$dir)
+    cp -R $dir $CACHE_DIR/$dir
   done
 bpwatch stop dump_cache