The `ADD` command invalidates the cache for all things below it so anything after an `ADD` command gets re-run on every build. Docker knows what happened in the `RUN    pip install blah thing stuff` and has that saved to a container that it can then build on. It can't really know what happened during an `ADD` command since the files could have arbitrarily changed.