Use a set to reduce python_path_entries length

Resolves #10977

Closes #10978.

PiperOrigin-RevId: 302688439
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt
index 4ef1545..59c00e8 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/python_stub_template.txt
@@ -18,6 +18,7 @@
 import subprocess
 import tempfile
 import zipfile
+import collections
 
 # Return True if running on Windows
 def IsWindows():
@@ -261,6 +262,10 @@
 ----------------""".format(diagnostic=diagnostic)
   print(message, file=sys.stderr)
 
+def Deduplicate(items):
+  """Efficiently filter out duplicates, keeping the first element only."""
+  return list(collections.OrderedDict((it, None) for it in items).keys())
+
 def Main():
   args = sys.argv[1:]
 
@@ -274,7 +279,9 @@
   python_imports = '%imports%'
   python_path_entries = CreatePythonPathEntries(python_imports, module_space)
   python_path_entries += GetRepositoriesImports(module_space, %import_all%)
-
+  # Remove duplicates to avoid overly long PYTHONPATH (#10977). Preserve order,
+  # keep first occurrence only.
+  python_path_entries = Deduplicate(python_path_entries)
   python_path_entries = [GetWindowsPathWithUNCPrefix(d) for d in python_path_entries]
 
   old_python_path = os.environ.get('PYTHONPATH')