diff --git a/bin/compile b/bin/compile
index 005eb4de417433194eabb12b183b113f9535cb9a..1d9058af9b7653c15e3e3b5eff9bb4762bead4c9 100755
--- a/bin/compile
+++ b/bin/compile
@@ -148,11 +148,14 @@ bpwatch start restore_cache
     cp -R $CACHE_DIR/.heroku/python-version .heroku/ &> /dev/null || true
     cp -R $CACHE_DIR/.heroku/vendor .heroku/ &> /dev/null || true
     cp -R $CACHE_DIR/.heroku/venv .heroku/ &> /dev/null || true
+    if [[ -d $CACHE_DIR/.heroku/src ]]; then
+      cp -R $CACHE_DIR/.heroku/src .heroku/ &> /dev/null || true
+    fi
 
 bpwatch stop restore_cache
 
 mkdir -p $(dirname $PROFILE_PATH)
-mkdir /app/.heroku/src
+mkdir -p /app/.heroku/src
 
 if [[ $BUILD_DIR != '/app' ]]; then
     # python expects to reside in /app, so set up symlinks
@@ -160,6 +163,7 @@ if [[ $BUILD_DIR != '/app' ]]; then
     ln -s $BUILD_DIR/.heroku/python /app/.heroku/python
     ln -s $BUILD_DIR/.heroku/vendor /app/.heroku/vendor
     ln -s $BUILD_DIR/.heroku/venv /app/.heroku/venv
+    # Note: .heroku/src is copied in later.
 fi
 
 # Install Python.
@@ -228,6 +232,7 @@ bpwatch start dump_cache
   rm -rf $CACHE_DIR/.heroku/python-stack
   rm -rf $CACHE_DIR/.heroku/vendor
   rm -rf $CACHE_DIR/.heroku/venv
+  rm -rf $CACHE_DIR/.heroku/src
 
   mkdir -p $CACHE_DIR/.heroku
   cp -R .heroku/python $CACHE_DIR/.heroku/
@@ -235,6 +240,9 @@ bpwatch start dump_cache
   cp -R .heroku/python-stack $CACHE_DIR/.heroku/ &> /dev/null || true
   cp -R .heroku/vendor $CACHE_DIR/.heroku/ &> /dev/null || true
   cp -R .heroku/venv $CACHE_DIR/.heroku/ &> /dev/null || true
+  if [[ -d .heroku/src ]]; then
+    cp -R .heroku/src $CACHE_DIR/.heroku/ &> /dev/null || true
+  fi
 
 bpwatch stop dump_cache
 
diff --git a/bin/steps/pip-install b/bin/steps/pip-install
index 7dea3cea08e139646886b41bda308e265a7cc7ee..ab02c105f7d90ae87029f2c94ac3bd18019fdf7b 100755
--- a/bin/steps/pip-install
+++ b/bin/steps/pip-install
@@ -1,6 +1,10 @@
 # Install dependencies with Pip.
 puts-cmd "pip install -r requirements.txt"
 
+# rewrite any existing egg links to point to the build dir so pip does not fail with a mismatch error
+find .heroku/python/lib/python*/site-packages/ -name "*.egg-link" -print0 | xargs -r -0 -n 1 sed -i -e "s#/app/#$(pwd)/#"
+find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 | xargs -r -0 -n 1 sed -i -e "s#/app/#/$(pwd)/#"
+
 [ ! "$FRESH_PYTHON" ] && bpwatch start pip_install
 [ "$FRESH_PYTHON" ] && bpwatch start pip_install_first
 
@@ -23,4 +27,9 @@ cp requirements.txt .heroku/python/requirements-declared.txt
 [ ! "$FRESH_PYTHON" ] && bpwatch stop pip_install
 [ "$FRESH_PYTHON" ] && bpwatch stop pip_install_first
 
+# rewrite build dir in egg links to /app so things are found at runtime
+find .heroku/python/lib/python*/site-packages/ -name "*.egg-link" -print0 | xargs -r -0 -n 1 sed -i -e "s#$(pwd)/#/app/#"
+find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 | xargs -r -0 -n 1 sed -i -e "s#$(pwd)/#/app/#"
+
+
 echo