Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Windows: cached venv initialization fails on dangling package symlinks

Ouverte
#4,269 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

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

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de bazel-contrib/rules_python

Toutes les issues de bazel-contrib/rules_python

Issues similaires

Plus d'issues Build System

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.