Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Cannot run native python binary script without C++ toolchain

未关闭
#4,040 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
50/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
冷清
技术栈
python
领域
build-system

调研方向

从最小的 MODULE.bazel 和 BUILD.bazel 示例开始,然后在将 BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN 设置为 1 的情况下运行报告中的 bazel run、cquery 和 aquery 命令。比较已解析的工具链和操作,以确定纯 py_binary 是否可以避免解析 C++ 工具链;行为得到修复或其有意要求得到记录即表示完成。

由索引模型根据 Issue 内容生成。

描述

🐞 bug report

Affected Rule

py_binary

Is this a regression?

Not tested, unlikely.

Description

A trivial pure-Python py_binary appears to require C++ toolchain resolution even though it does not produce any C++ compile or link actions.

In a minimal example, bazel cquery //:hello_world --toolchain_resolution_debug='.*' shows that Bazel resolves both:

  • @@bazel_tools//tools/python:toolchain_type
  • @@bazel_tools//tools/cpp:toolchain_type

However, bazel aquery //:hello_world only shows Python-related actions such as Python bytecode precompilation and bootstrap/template generation. There are no C++ compile or link actions for the target.

This is surprising for Python-only projects. In environments where no C++ toolchain is configured or available, this can cause a trivial py_binary to fail analysis even though the target itself does not build native code.

From a user perspective, I would expect a pure py_binary with no native extensions and no C/C++ deps to avoid requiring successful C++ toolchain resolution, or at least for the requirement to be documented if it is intentional.

🔬 Minimal Reproduction

MODULE.bazel

module(
    name = "bazel_hello_py",
    version = "0.1.0",
)

bazel_dep(name = "rules_shell", version = "0.6.1")
bazel_dep(name = "rules_python", version = "1.7.0")

BUILD.bazel

load("@rules_python//python:defs.bzl", "py_binary")

py_binary(
    name = "hello_world",
    srcs = ["hello_world.py"],
)

hello_world.py

print("hello world")
bazel run //:hello_world --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=<0|1>
bazel cquery //:hello_world --toolchain_resolution_debug='.*'
bazel aquery //:hello_world

Observed behavior:

  1. bazel run //:hello_world succeeds if the repo_env is set to 0 but fails on 1
  2. cquery shows that @@bazel_tools//tools/cpp:toolchain_type is resolved for the target.
  3. aquery shows only Python-related actions and no C++ compile/link actions.

This suggests the C++ toolchain resolution is happening even for a pure-Python binary with no actual C++ build work.

🔥 Exception or Error

$ bazel run  //:hello_world --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
ERROR: .../external/bazel_tools/src/tools/launcher/BUILD:75:10: While resolving toolchains for target @@bazel_tools//src/tools/launcher:launcher_maker (04bf134): No matching toolchains found for types:
  @@bazel_tools//tools/cpp:toolchain_type
To debug, rerun with --toolchain_resolution_debug='@@bazel_tools//tools/cpp:toolchain_type'
For more information on platforms or toolchains see https://bazel.build/concepts/platforms-intro.
ERROR: Analysis of target '//:hello_world' failed; build aborted: Analysis failed
INFO: Elapsed time: 0.107s, Critical Path: 0.01s
INFO: 1 process: 1 internal.
ERROR: Build did NOT complete successfully
ERROR: Build failed. Not running target

🌍 Your Environment

Operating System:

  
     Linux (Ubuntu LTS 24.04)
  

Output of bazel version:

  
    Bazelisk version: v1.29.0 Build label: 9.2.0 Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer Build time: Mon Jul 13 18:15:04 2026 (1783966504) Build timestamp: 1783966504 Build timestamp as int: 1783966504
  

Rules_python version:

  
     1.7.0
  

Anything else relevant?

Related issues I found while searching:
rules_python #1857 discusses py_binary and C++ toolchain resolution in cross-compilation scenarios.
rules_python #2500 discusses replacing the stage1 bootstrap with a native launcher.

My main question is whether this C++ toolchain resolution for a pure py_binary is intentional.

主要语言
Starlark
星标
690
派生
722
平均合并
1 天 55 分钟
30 天内合并 PR
38

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

bazel-contrib/rules_python 的其他 Issue

查看 bazel-contrib/rules_python 的全部 Issue

相似的 Issue

更多 Build System Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。