馃殌 feature request
Relevant Rules
Description
The python_binary_naming_convention directive currently only applies to binaries that are generated from __main__.py files.
py_binary targets that are generated from files that contain if __name__ == "__main__": are named after their source file. From the README (emphasis mine):
If python_generation_mode is set to file, then instead of one py_binary target per module, Gazelle will create one py_binary target for each file with such a line, and the name of the target will match the name of the script.
This results in name collisions when a single file is both a binary and a library and gazelle will report:
gazelle: failed to generate target "//foobar" of kind "py_binary": a target of kind "py_library" with the same name already exists
The readme also says:
Note that it's possible for another script to depend on a py_binary target and import from the py_binary's scripts. This can have possible negative effects on Bazel analysis time and runfiles size compared to depending on a py_library target. The simplest way to avoid these negative effects is to extract library code into a separate script without a main line. Gazelle will then create a py_library target for that library code, and other scripts can depend on that py_library target.
However, for existing projects that might not be feasible.
Describe the solution you'd like
Have python_binary_naming_convention directive also apply to files that contain if __name__ ....
Or add another directive that accomplishes such.
Describe alternatives you've considered
Right now I'm just manually making all ~450 or so py_binary targets that our monorepo has 馃槶
# libs are generated by gazelle
py_library(
name = "foo",
srcs = ["foo.py"],
deps = [
":bar",
"//bin/bom:boo",
"@pypi:hello",
],
)
# binaries are manually added, using the lib as a dependency so that I don't have to keep `deps` in sync.
py_binary(
name = "foo_bin",
srcs = ["foo.py"],
deps = [":foo"],
)
馃殌 feature request
Relevant Rules
Description
The
python_binary_naming_conventiondirective currently only applies to binaries that are generated from__main__.pyfiles.py_binarytargets that are generated from files that containif __name__ == "__main__":are named after their source file. From the README (emphasis mine):This results in name collisions when a single file is both a binary and a library and gazelle will report:
The readme also says:
However, for existing projects that might not be feasible.
Describe the solution you'd like
Have
python_binary_naming_conventiondirective also apply to files that containif __name__ ....Or add another directive that accomplishes such.
Describe alternatives you've considered
Right now I'm just manually making all ~450 or so
py_binarytargets that our monorepo has 馃槶