Skip __init__.py in __pycache__ dir.

RELNOTES: None.
PiperOrigin-RevId: 211644731
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonUtils.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonUtils.java
index c524a30..a53ae8f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonUtils.java
@@ -36,6 +36,7 @@
 public final class PythonUtils {
   public static final PathFragment INIT_PY = PathFragment.create("__init__.py");
   public static final PathFragment INIT_PYC = PathFragment.create("__init__.pyc");
+  public static final PathFragment PYCACHE = PathFragment.create("__pycache__");
 
   private static final FileType REQUIRES_INIT_PY = FileType.of(".py", ".so", ".pyc");
 
@@ -64,14 +65,17 @@
     for (PathFragment source : manifestFiles) {
       // If we have a python or .so file at this level...
       if (REQUIRES_INIT_PY.matches(source)) {
-        // ...then record that we need an __init__.py in this directory...
+        // ...then record that we need an __init__.py in this and all parents directories...
         while (source.segmentCount() > 1) {
           source = source.getParentDirectory();
-          PathFragment initpy = source.getRelative(INIT_PY);
-          PathFragment initpyc = source.getRelative(INIT_PYC);
+          // ...unless it's a Python .pyc cache or we already have __init__ there.
+          if (!source.endsWith(PYCACHE)) {
+            PathFragment initpy = source.getRelative(INIT_PY);
+            PathFragment initpyc = source.getRelative(INIT_PYC);
 
-          if (!manifestFiles.contains(initpy) && !manifestFiles.contains(initpyc)) {
-            result.add(initpy);
+            if (!manifestFiles.contains(initpy) && !manifestFiles.contains(initpyc)) {
+              result.add(initpy);
+            }
           }
         }
       }