bazel-contrib / bazel-contrib/rules_python
Deprecate and remove implicit py_binary zipapp support
- 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ả
The implicit zipapp support of `py_binary` and `py_test` is being deprecated and removed. It is replaced by the `py_zipapp_binary` and `py_zipapp_test` rules. There are several ways the implicit zipapp logic may be activated.
For reference, these are the two loads you're most likely to need:
```
load("@rules_python//python/zipapp:py_zipapp_binary.bzl", "py_zipapp_binary")
load("@rules_python//python/zipapp:py_zipapp_test.bzl", "py_zipapp_test")
```
The flag name you want to look for is `build_python_zip`.
> **Windows-specific note**: Windows enables zipapp by default, so the _absence_ of the flag is the same as `--build_python_zip=true` !
# Migration guide
This guide tries to give information on how to handle all possible cases of what may need to be migrated. Most changes are small, should be transparent, and can be done incrementally.
In practice, the most likely scenario you'll need to fix is using the
`--build_python_zip` flag on the command line -- see the "Migrate explicit --build_python_zip" section for that case.
## Disable legacy zipapp flag
Add `common --build_python_zip=false --@rules_python//python/config_settings:build_python_zip=false` to your `.bazelrc`
> **Windows-specific note**: Windows enables zipapp by default
## Migrate explicit `--build_python_zip` usage
TLDR: Replace `--build_python_zip` on the command line with a `py_zipapp_binary` target in a BUILD file.
Replace this:
```
# File: BUILD
py_binary(name="bin")
# Command line
bazel build //:bin --build_python_zip
```
With this:
```
# File: BUILD
load("@rules_python//python/zipapp:py_zipapp_binary", "py_zipapp_binary")
py_binary(name="bin")
py_zipapp_binary(name = "bin_zipapp", binary=":bin")
# Command line
bazel build //:bin_zipapp
```
## Migrate `py_binary` using `config_settings` with `py_zipapp` rule
TLDR: Add `py_zipapp_binary` for each `py_binary` you want as a zipapp
Replace this:
```
py_binary(
name = "bin"
config_settings = {
"@rules_python//python/config:build_python_zip": "true",
"//command_line_option:build_python_zip": "true",
},
...
)
```
With this:
```
load("@rules_python//python/zipapp:py_zipapp_binary", "py_zipapp_binary")
py_binary(
name = "bin"
...
)
py_zipapp_binary(
name = "bin.zipapp",
binary = ":bin",
)
```
## Migrate `filegroup` using `python_zip_file` output group
Replace this:
TLDR: Add `py_zipapp_binary` and point the filegroup to it.
```
py_binary(name = "bin", ...)
filegroup(
name = "bin_zip_file",
output_group = "python_zip_file",
srcs = [":bin"],
)
```
With this:
```
load("@rules_python//python/zipapp:py_zipapp_binary", "py_zipapp_binary")
py_binary(name = "bin", ...)
py_zipapp_binary(name = "bin_zipapp", binary=":bin")
filegroup(
name = "bin_zip_file",
output_group = "python_zip_file",
srcs = [":bin_zipapp"],
)
```
## Migrate Starlark using `python_zip_file` output group
TLDR: Add `py_zipapp` target and use it as the input target instead.
Replace this:
```
# File: my_rule.bzl
def _my_rule_impl(ctx):
zip_file = ctx.attr.binary[OutputGroupInfo]["python_zip_file"].to_list()[0]
# File: BUILD.bazel
py_binary(name="bin", ...)
my_rule(name = "mytarget", binary=":bin", ...)
```
With this:
```
# File: my_rule.bzl
def _my_rule_impl(ctx):
zip_file = ctx.attr.binary[OutputGroupInfo]["python_zip_file"].to_list()[0]
# File: BUILD.bazel
load("@rules_python//python/zipapp:py_zipapp_binary", "py_zipapp_binary")
py_binary(name="bin", ...)
py_zipapp_binary(name = "bin_zipapp", binary=":bin")
my_rule(name = "mytarget", binary=":bin_zipapp", ...)
```
## Migration transitions setting build_python_zip flags
TLDR: Remove the `build_python_zip` flags from the transition and refactor into a separate target.
Replace this:
```
# File: rule.bzl
my_transition = transition(
outputs = [
"//command_line_settings:build_python_zip",
"@rules_python//python/config_settings:build_python_zip",
],
...
)
my_rule(cfg = my_transition, ...)
# File: BUILD
py_binary(name="bin", ...)
my_rule(target=":bin")
```
With this:
```
# File: rule.bzl
my_transition = transition(
outputs = [],
...
)
my_rule(cfg = my_transition, ...)
# File: BUILD
load("@rules_python//python/zipapp:py_zipapp_binary", "py_zipapp_binary")
py_binary(name="bin", ...)
py_zipapp_binary(name="bin_zipapp", binary=":bin")
my_rule(target=":bin_zipapp")
```
Hướng dẫn đóng góp
Hướng nghiên cứu
Tìm trong repository các chuỗi build_python_zip và python_zip_file, sau đó kiểm tra các tệp BUILD được tham chiếu, các triển khai my_rule.bzl và các transition trong rule.bzl. So sánh từng cách sử dụng với các trường hợp migration trong issue này và xác định các target Bazel bị ảnh hưởng. Hoàn thành có nghĩa là các đường dẫn zipapp ngầm định legacy đã được xóa hoặc migrate sang py_zipapp_binary hoặc py_zipapp_test mà không làm hỏng các build liên quan.
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
- Tái cấu trúc
- Độ 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
- 45/100