rules_python
rules_python copied to clipboard
Remove automatic __init__.py generation (set incompatible_default_to_explicit_init_py to true)
The automatic generation of __init__.py files has been a source of odd, surprising, and incorrect behavior. e.g. it makes directories importable that shouldn't be importable. This is because it's logic is extremely simple: create an init.py file in every parent directory for a path that ends with .py or .so.
It's also expensive: it requires flattening the runfiles at analysis time.
Some of the venv site package work incidentally side-steps this because the way it creates symlinks "hides" some of the paths from the regular set of runfiles.
Addressing this is a bit more complicated because the incompatible_default_to_explicit_init_py lives in bazel, but the usage is in rules_python.
In any case, I think the todo list is:
- [ ] Add a rules_python flag to replace incompatible_default_to_explicit_init_py
- [ ] Disable the behavior by default
- [ ] Remove the dead code paths
Users can use --flag_alias to map (1) to the bazel builtin flag.
This is the rules_python side of https://github.com/bazelbuild/bazel/issues/7386