Windows: cached venv initialization fails on dangling package symlinks
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 45/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- python
- Domaine
- build-system
Piste de recherche
The failure is in _create_venv in python/private/python_bootstrap_template.txt, at the os.makedirs(dirname(venv_abs_path), exist_ok=True) call (around line 657). The issue's reproduction script execs that template and simulates a dangling directory symlink followed by a new one; start there. Done when the script's final assertions pass on Windows, with the stale link replaced by the required directory.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
🐞 bug report
Affected Rule
py_binary: _create_venv in
python/private/python_bootstrap_template.txt.
Is this a regression?
Nope. Present since Windows site-packages venv support. (Great feature by the way - saved us with 'awesome' windows path length lmitations)
Description
On Windows, a persistent venv contains a dangling
Lib/site-packages/annotated_types directory symlink into obsolete runfiles (Got obsolete through a python version upgrade).
The next initialization fails at:
os.makedirs(dirname(venv_abs_path), exist_ok=True)
The executable exits before creating the runtime symlink. The Bazel build
succeeds. Expected: replace the dangling link with the required directory.
🔬 Minimal Reproduction
Run this from a rules_python checkout on Windows. It exercises
_create_venv with the blocking state;
import sys
import tempfile
from pathlib import Path
template = Path("python/private/python_bootstrap_template.txt")
source = template.read_text(encoding="utf-8")
for placeholder, value in [
("%shebang%", "#!/usr/bin/env python3"),
("%stage2_bootstrap%", "unused.py"),
("%runtime_venv_symlinks%", ""),
]:
source = source.replace(placeholder, value)
bootstrap = {"__name__": "bootstrap_repro"}
saved_path = sys.path[:]
try:
exec(compile(source, str(template), "exec"), bootstrap)
finally:
sys.path[:] = saved_path
with tempfile.TemporaryDirectory() as temp:
root = Path(temp)
runfiles = root / "runfiles"
old = runfiles / "old/annotated_types"
old.mkdir(parents=True)
(old / "__init__.py").touch()
bootstrap.update(
EXTRACT_ROOT=str(root / "cache"),
PYTHON_BINARY="_main/_process.venv/Scripts/python.exe",
PYTHON_BINARY_ACTUAL=sys.executable,
RESOLVE_PYTHON_BINARY_AT_RUNTIME=False,
RUNTIME_VENV_SYMLINKS={
"Lib/site-packages/annotated_types": "old/annotated_types",
},
)
bootstrap["_create_venv"](str(runfiles), [])
old.rename(root / "retired-package")
new = runfiles / "new/annotated_types"
new.mkdir(parents=True)
(new / "__init__.py").touch()
bootstrap["RUNTIME_VENV_SYMLINKS"] = {
"Lib/site-packages/annotated_types/__init__.py":
"new/annotated_types/__init__.py",
}
bootstrap["_create_venv"](str(runfiles), [])
package = root / "cache/_main/_process.venv/Lib/site-packages/annotated_types"
assert not package.is_symlink()
assert (package / "__init__.py").is_symlink()
print("Cached regular package recovered successfully")
🔥 Exception or Error
File ".../python_bootstrap...", line 909, in main
python_program = _create_venv(runfiles_root, delete_dirs)
File ".../python_bootstrap...", line 657, in _create_venv
os.makedirs(dirname(venv_abs_path), exist_ok=True)
File "<frozen os>", line 228, in makedirs
FileExistsError: [WinError 183]
...\_process.venv\Lib\site-packages\annotated_types
🌍 Your Environment
Operating System: Windows 11 x86_64 (10.0.26200).
Output of bazel version:
Build label: 9.1.1
Rules_python version: c9c1794dab34cc50260cab4a7ddf96f023cff575
Anything else relevant? CPython 3.12.7; Windows symlinks enabled;
persistent RULES_PYTHON_EXTRACT_ROOT.
- Langage dominant
- Starlark
- Étoiles
- 687
- Forks
- 726
- Merge moyen
- 1 j 7 h
- PR mergées (30 j)
- 80
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de bazel-contrib/rules_python
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
bazel-contrib/rules_python#4251 · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
bazel-contrib/rules_python#4164 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
go:embed stdlib_list.txt file in gazelle/python/std_modules.go is missingPeut-être pris @udaya2899 l’a pris il y a 17 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
bazel-contrib/rules_python#3821 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 20/100
bazel-contrib/rules_python#4250 ·
Les mainteneurs répondent en général sous 1 jour
-
Bazel 7 native py_binary: startup and import failures with rules_python 2.4.1Peut-être pris @gleyba l’a pris il y a 7 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 30/100
bazel-contrib/rules_python#4234 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de bazel-contrib/rules_python
Issues similaires
-
ci: nothing regenerates the Go contract types, so a hand-edit to types.gen.go passesPeut-être pris @shaiknoorullah l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
shaiknoorullah/hg-mono#993 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
snakemake/snakemake#4341 · 2 commentaires ·
Les mainteneurs répondent en général sous 6 jours
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
Countly/countly-sdk-ios#485 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
s4u/setup-maven-action#172 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 4 jours