fix: trimming deps in py_binary (#1614)

The `py_binary` targets for main modules should only depend on the
modules that it imports, not blindly inheriting from the py_library.
diff --git a/gazelle/python/generate.go b/gazelle/python/generate.go
index 8d147d9..5ab9f53 100644
--- a/gazelle/python/generate.go
+++ b/gazelle/python/generate.go
@@ -220,7 +220,7 @@
 	collisionErrors := singlylinkedlist.New()
 
 	appendPyLibrary := func(srcs *treeset.Set, pyLibraryTargetName string) {
-		deps, mainModules, err := parser.parse(srcs)
+		allDeps, mainModules, err := parser.parse(srcs)
 		if err != nil {
 			log.Fatalf("ERROR: %v\n", err)
 		}
@@ -248,10 +248,13 @@
 						fqTarget.String(), actualPyBinaryKind, err)
 					continue
 				}
+				binaryDeps := allDeps.Select(func(index int, value interface{}) bool {
+					return value.(module).Filepath == filepath.Join(args.Rel, filename)
+				})
 				pyBinary := newTargetBuilder(pyBinaryKind, pyBinaryTargetName, pythonProjectRoot, args.Rel, pyFileNames).
 					addVisibility(visibility).
 					addSrc(filename).
-					addModuleDependencies(deps).
+					addModuleDependencies(binaryDeps).
 					generateImportsAttribute().build()
 				result.Gen = append(result.Gen, pyBinary)
 				result.Imports = append(result.Imports, pyBinary.PrivateAttr(config.GazelleImportsKey))
@@ -261,7 +264,7 @@
 		pyLibrary := newTargetBuilder(pyLibraryKind, pyLibraryTargetName, pythonProjectRoot, args.Rel, pyFileNames).
 			addVisibility(visibility).
 			addSrcs(srcs).
-			addModuleDependencies(deps).
+			addModuleDependencies(allDeps).
 			generateImportsAttribute().
 			build()
 
diff --git a/gazelle/python/testdata/binary_without_entrypoint/BUILD.in b/gazelle/python/testdata/binary_without_entrypoint/BUILD.in
index 7aace67..1177dce 100644
--- a/gazelle/python/testdata/binary_without_entrypoint/BUILD.in
+++ b/gazelle/python/testdata/binary_without_entrypoint/BUILD.in
@@ -1,4 +1,6 @@
 # gazelle:python_library_naming_convention py_default_library
+# gazelle:resolve py numpy @pip//:numpy
+# gazelle:resolve py pandas @pip//:pandas
 
 filegroup(
     name = "collided_main",
diff --git a/gazelle/python/testdata/binary_without_entrypoint/BUILD.out b/gazelle/python/testdata/binary_without_entrypoint/BUILD.out
index 9dae147..72fc670 100644
--- a/gazelle/python/testdata/binary_without_entrypoint/BUILD.out
+++ b/gazelle/python/testdata/binary_without_entrypoint/BUILD.out
@@ -1,6 +1,8 @@
 load("@rules_python//python:defs.bzl", "py_binary", "py_library", "py_test")
 
 # gazelle:python_library_naming_convention py_default_library
+# gazelle:resolve py numpy @pip//:numpy
+# gazelle:resolve py pandas @pip//:pandas
 
 filegroup(
     name = "collided_main",
@@ -11,12 +13,14 @@
     name = "main",
     srcs = ["main.py"],
     visibility = ["//:__subpackages__"],
+    deps = ["@pip//:pandas"],
 )
 
 py_binary(
     name = "main2",
     srcs = ["main2.py"],
     visibility = ["//:__subpackages__"],
+    deps = [":py_default_library"],
 )
 
 py_library(
@@ -28,6 +32,10 @@
         "main2.py",
     ],
     visibility = ["//:__subpackages__"],
+    deps = [
+        "@pip//:numpy",
+        "@pip//:pandas",
+    ],
 )
 
 py_test(
diff --git a/gazelle/python/testdata/binary_without_entrypoint/collided_main.py b/gazelle/python/testdata/binary_without_entrypoint/collided_main.py
index 3668fcc..3bf59c7 100644
--- a/gazelle/python/testdata/binary_without_entrypoint/collided_main.py
+++ b/gazelle/python/testdata/binary_without_entrypoint/collided_main.py
@@ -1,2 +1,4 @@
+import numpy
+
 if __name__ == "__main__":
     run()
\ No newline at end of file
diff --git a/gazelle/python/testdata/binary_without_entrypoint/main.py b/gazelle/python/testdata/binary_without_entrypoint/main.py
index 3668fcc..f13cbe5 100644
--- a/gazelle/python/testdata/binary_without_entrypoint/main.py
+++ b/gazelle/python/testdata/binary_without_entrypoint/main.py
@@ -1,2 +1,4 @@
+import pandas
+
 if __name__ == "__main__":
     run()
\ No newline at end of file
diff --git a/gazelle/python/testdata/binary_without_entrypoint/main2.py b/gazelle/python/testdata/binary_without_entrypoint/main2.py
index 84e642a..a82a5e6 100644
--- a/gazelle/python/testdata/binary_without_entrypoint/main2.py
+++ b/gazelle/python/testdata/binary_without_entrypoint/main2.py
@@ -1,2 +1,4 @@
+import collided_main
+
 if __name__ == "__main__":
     run()