Deprecate and remove implicit py_binary zipapp support
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 45/100
- Issue 类型
- 重构
- 描述清晰度
- 基本清楚
- 活跃度
- 停滞
- 技术栈
- python
- 领域
- build-system
调研方向
在仓库中搜索 build_python_zip 和 python_zip_file,然后检查所引用的 BUILD 文件、my_rule.bzl 实现以及 rule.bzl 的 transition。将每个用法与此 issue 中的迁移案例进行比较,并确定受影响的 Bazel targets。完成标准是:移除旧的隐式 zipapp 路径,或将其迁移到 py_zipapp_binary 或 py_zipapp_test,同时不破坏相关构建。
由索引模型根据 Issue 内容生成。
描述
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")
- 主要语言
- Starlark
- 星标
- 690
- 派生
- 722
- 平均合并
- 1 天 55 分钟
- 30 天内合并 PR
- 38
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
bazel-contrib/rules_python 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 70/100
bazel-contrib/rules_python#4179 ·
-
难度 2/5 1-3 小时 新手友好度 78/100
bazel-contrib/rules_python#4164 · 1 条评论 ·
-
难度 2/5 1-3 小时 新手友好度 72/100
bazel-contrib/rules_python#3821 ·
-
难度 3/5 1-2 天 新手友好度 45/100
bazel-contrib/rules_python#4181 ·
-
Release 2.4.0 未关闭type: release
难度 4/5 3-5 天 新手友好度 25/100
bazel-contrib/rules_python#4175 · 3 条评论 ·
查看 bazel-contrib/rules_python 的全部 Issue
相似的 Issue
-
Name consistency 未关闭
难度 2/5 1-3 小时 新手友好度 75/100
eellak/triplestore#65 · 1 条评论 ·
-
难度 2/5 1-3 小时 新手友好度 70/100
google-ai-edge/LiteRT-LM#3739 ·
-
难度 2/5 1-3 小时 新手友好度 70/100
-
area-Bzlmod team-ExternalDeps type: bug untriaged
难度 2/5 1-3 小时 新手友好度 65/100
bazelbuild/bazel#31291 · 2 条评论 ·
-
bug
难度 2/5 1-3 小时 新手友好度 75/100
bradcypert/plum#53 ·