Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Deprecate and remove implicit py_binary zipapp support

オープン
#3,567 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
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 ターゲットを特定します。完了の定義は、従来の暗黙的な 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分
マージ済み PR(30日)
38

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

bazel-contrib/rules_python のほかの issue

bazel-contrib/rules_python の issue をすべて見る

似ている issue

Build System の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。