py_binary system_python bootstrap can import target outputs instead of stdlib modules
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 74/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Tranquilla
- Stack tecnologico
- python
- Ambito
- build-system
Direzione di ricerca
Inizia con python/private/python_bootstrap_template.txt e il bootstrap system_python selezionato dall'impostazione .bazelrc. Riproduci il problema con bazel run //shadow_pkg:hello usando gli output generati shutil.py e types.py, quindi confronta con PYTHONSAFEPATH=1. Il lavoro è completato quando il bootstrap non importa più moduli generati dal target e il comando stampa "hello from main".
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
🐞 bug report
Affected Rule
The issue is caused by the rule:py_binary when using the Python stage1 bootstrap selected by
--@rules_python//python/config_settings:bootstrap_impl=system_python.
The problem is in python/private/python_bootstrap_template.txt: stage1 imports
stdlib modules before removing the launcher's directory from sys.path[0].
Is this a regression?
Unknown. Reproduced with rules_python `main` at2.1.0-rc0-11-g1a15c3b4.
Description
A clear and concise description of the problem...The generated Python stage1 bootstrap imports stdlib modules while Python still
has the launcher directory at sys.path[0]. If the target package has generated
outputs next to the launcher with stdlib module names, those target files can be
imported instead of the Python standard library before rules_python finishes
bootstrap setup.
In the minimal reproduction below, the target generates shutil.py and
types.py next to the launcher in bazel-bin/shadow_pkg/. When stage1 executes,
its import shutil resolves to the generated target output instead of stdlib
shutil.
This is similar in root cause to
https://github.com/bazel-contrib/rules_python/issues/382, but this report is
specifically about stdlib shadowing inside the generated stage1 bootstrap before
the user's program runs.
🔬 Minimal Reproduction
Minimal local reproduction:
/av/develop/tmp/rules_python_reproductions/stdlib_shadowing
The repro uses local_path_override to point at:
/av/develop/tmp/rules_python
Relevant files:
# .bazelrc
build --@rules_python//python/config_settings:bootstrap_impl=system_python
# shadow_pkg/BUILD.bazel
load("@rules_python//python:py_binary.bzl", "py_binary")
genrule(
name = "generated_stdlib_modules",
outs = [
"shutil.py",
"types.py",
],
cmd = """
cat > $(@D)/shutil.py <<'PY'
raise RuntimeError('target output shutil.py shadowed the stdlib shutil module')
PY
cat > $(@D)/types.py <<'PY'
raise RuntimeError('target output types.py shadowed the stdlib types module')
PY
""",
)
py_binary(
name = "hello",
srcs = [
"main.py",
":generated_stdlib_modules",
],
main = "main.py",
)
# shadow_pkg/main.py
print("hello from main")
Run:
bazel run //shadow_pkg:hello
Expected result:
hello from main
Actual result:
The bootstrap fails before main.py runs because it imports generated
bazel-bin/shadow_pkg/shutil.py instead of stdlib shutil.
🔥 Exception or Error
Traceback (most recent call last):
File ".../execroot/_main/bazel-out/k8-fastbuild/bin/shadow_pkg/hello", line 12, in <module>
import shutil
File ".../execroot/_main/bazel-out/k8-fastbuild/bin/shadow_pkg/shutil.py", line 1, in <module>
raise RuntimeError('target output shutil.py shadowed the stdlib shutil module')
RuntimeError: target output shutil.py shadowed the stdlib shutil module
🌍 Your Environment
Operating System:
Linux gkolobkov 6.8.0-124-generic #124-Ubuntu SMP PREEMPT_DYNAMIC Tue May 26 13:00:45 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux
Output of bazel version:
Bazelisk version: v1.27.0
Build label: 9.1.1
Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
Build time: Wed Jun 03 15:41:13 2026 (1780501273)
Build timestamp: 1780501273
Build timestamp as int: 1780501273
Rules_python version:
rules_python main at 2.1.0-rc0-11-g1a15c3b4
Anything else relevant?
The issue is avoided if Python safe-path mode is enabled:
PYTHONSAFEPATH=1 bazel run //shadow_pkg:hello
That succeeds and prints:
hello from main
This suggests the stage1 bootstrap should remove the unsafe sys.path[0] entry
before importing any stdlib modules, or otherwise ensure safe-path behavior for
the stage1 process.
- Lingua principale
- Starlark
- Stelle
- 690
- Fork
- 722
- Merge medio
- 1g 55m
- PR unite (30g)
- 38
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di bazel-contrib/rules_python
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
bazel-contrib/rules_python#4179 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
bazel-contrib/rules_python#4164 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
bazel-contrib/rules_python#3821 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
bazel-contrib/rules_python#4181 ·
-
Release 2.4.0 Apertatype: release
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
bazel-contrib/rules_python#4175 · 3 commenti ·
Tutte le issue di bazel-contrib/rules_python
Issue simili
-
nix: vendorHash is outdated Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
typelevel/sbt-typelevel#929 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
openSUSE/python-rpm-macros#219 ·
-
HMR stops working Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
Qiskit/mcp-servers#221 ·