bazel-contrib / bazel-contrib/rules_python

pip library import masked by a local directory leading to failures

Đang mở
#1,838 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
type: bug
Ngôn ngữ chính
Starlark
Star
688
Fork
721
Merge trung bình
15 giờ 7 phút
Pull request đã merge (30 ngày)
76

Mô tả

# 🐞 bug report
I'm seeing an unexpected testing failure when I import `google-cloud-storage` via pip, where there is also a subfolder called `grpc` local to the `py_library` under test.

It feels like a bug in how `py_library` resolves, certainly running the test with `python -m unittest [module]` works in the self-contained repro linked below.

### Affected Rule
`py_library` seems to be most likely rule.

### Is this a regression?
Uncertain, going back a few versions of rules_python hit the same issue.

### Description
The key parts is as follows:

`utils/BUILD.bazel:`
```
load("@rules_python//python:defs.bzl", "py_library", "py_test")

py_library(
name = "utils",
srcs = ["lib.py"],
visibility = ["//:__subpackages__"],
deps = [
"//utils/grpc",
"@pip//google_cloud_storage",
],
)

py_test(
name = "lib_test",
srcs = ["lib_test.py"],
deps = [":utils"],
)
```
The local `utils/grpc` subfolder just contains another trivial `py_library` that has a function that prints to stdout.

## 🔬 Minimal Reproduction
See https://github.com/paulannetts/bazel_py_issue_apr24

## 🔥 Exception or Error
Truncated error of `bazel test //utils:lib_test` (full error log available which jumps via the various pip dependencies of `google_cloud_storage`)



File "/private/var/tmp/_bazel_paul_lu/44119f469120dfe26bc0215a4f182a9c/sandbox/darwin-sandbox/9/execroot/_main/bazel-out/darwin_x86_64-fastbuild/bin/utils/lib_test.runfiles/rules_python~~pip~pip_39_google_auth/site-packages/google/auth/transport/grpc.py", line 37, in
class AuthMetadataPlugin(grpc.AuthMetadataPlugin):
AttributeError: module 'grpc' has no attribute 'AuthMetadataPlugin'

## 🌍 Your Environment

**Operating System:**
MacOS Sonoma

**Output of `bazel version`:**

  

Bazelisk version: development
Starting local Bazel server and connecting to it...
Build label: 7.1.1
Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
Build time: Thu Mar 21 18:08:59 2024 (1711044539)
Build timestamp: 1711044539
Build timestamp as int: 1711044539

**Rules_python version:**

`rules_python 0.31.0`

**Other info:**
Using bzlmod
`gazelle 0.35`
`python 3.9`

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu với bản tái hiện tối thiểu được liên kết và chạy `bazel test //utils:lib_test`. Đọc `utils/BUILD.bazel`, `lib.py`, `lib_test.py` và thư viện `utils/grpc` cục bộ để truy vết cách dependency `google_cloud_storage` được import. Hoàn tất khi test không còn resolve thư mục `grpc` cục bộ thay cho dependency pip và chạy thành công.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
python
Lĩnh vực
build-system
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.