Skip to content

Bazel can overwrite __init__.py with empty file in source tree #2947

Open
@tholenst

Description

@tholenst

Description of the bug:

If I mess up my BUILD structure, and forget to include srcs = ["__init__.py"], it seems it can happen that Bazel overwrites the existing __init__.py with an empty file.

Reproduce:

Setup the directory:

cd $(mktemp -d)
cat > MODULE.bazel <<-EOF
module(name = "test_module")

bazel_dep(name = "rules_python", version = "1.4.1")
EOF
mkdir some_package
cat > some_package/BUILD.bazel <<-EOF
load("@rules_python//python:defs.bzl", "py_library", "py_test")
py_library(
  name = "_some_library",
  srcs = ["_some_library.py"],
)
py_library(
  name = "some_package",
  srcs = ["__init__.py"],
  deps = [":_some_library"],
)
py_test(
  name = "correct_test",
  srcs = ["test.py"],
  main = "test.py",
  deps = [":some_package"],
)
py_test(
  name = "bad_dep_test",
  srcs = ["test.py"],
  main = "test.py",
  deps = [":_some_library"],
)
EOF
cat > some_package/__init__.py <<-EOF
import some_package._some_library
method=_some_library.method
EOF
cat > some_package/_some_library.py <<-EOF
def method():
  pass
EOF
cat > some_package/test.py <<-EOF
import some_package
some_package.method()
EOF

Double check the with tree. This gives:

.
├── MODULE.bazel
└── some_package
    ├── BUILD.bazel
    ├── __init__.py
    ├── _some_library.py
    └── test.py

Run the good test -- it will pass.

bazel test //some_package:correct_test

Then run the bad test. It fails and overwrites __init__.py.

bazel test //some_package:bad_dep_test

The run the good test. It now fails.

bazel test //some_package:correct_test

Note: Setting common --incompatible_default_to_explicit_init_py in .bazelrc fixes this.

See also #2945.

Metadata

Metadata

Assignees

No one assigned

    Labels

    core-rulesIssues concerning core bin/test/lib rulestype: bug

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions