bazel-contrib / bazel-contrib/rules_python

Remove automatic __init__.py generation (set incompatible_default_to_explicit_init_py to true)

Open
#2,945 12 comments 12 reactions 0 assignees View on GitHub
cleanup core-rules
Dominant language
Starlark
Stars
688
Forks
721
Avg merge
14h 49m
Merged PRs (30d)
81

Description

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:

1. [x] Add a rules_python flag to replace incompatible_default_to_explicit_init_py
2. [ ] Disable the behavior by default
3. [ ] 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

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.