bazel-contrib / bazel-contrib/rules_python

Loading rules_python should not depend on known python versions

Abierto
#3,633 19 comentarios 1 reacción 0 asignados Ver en GitHub
help wanted
Lenguaje dominante
Starlark
Estrellas
688
Forks
721
Merge medio
15 h 7 min
PR fusionados (30 d)
76

Descripción

# 🐞 bug report

### Affected Rule

The issue is caused by the rule:

**python = use_extension("@rules_python//python/extensions:python.bzl", "python")**

Loading `python` seems to check the system python version. This makes it impossible to use rules_python if the version is not in its version dict:
```
File "$BUILD/external/rules_python+/python/private/python_register_toolchains.bzl", line 106, column 31, in python_register_toolchains
sha256 = tool_versions[python_version]["sha256"].get(platform, None)
Error: key "3.14.0b2" not found in dictionary
ERROR: Analysis of target '@@rules_python+//python/bin:repl' failed; build aborted:
error evaluating module extension @@rules_python+//python/extensions:python.bzl%python
```
Note that this happens when loading the python extension, which is required to configure the python version, creating a catch 22.

### Is this a regression?

I have found other occurrences ([1](https://github.com/bazelbuild/bazel/issues/28560),[2](https://github.com/grpc/grpc/issues/41438)) of the error message (as below) but I don't think it was traced to this before. It it likely a regression that happens every now and then when some python version gets a weird id and due to the hard coded map of versions in rules_python.

### Description

Nothing that depends on rules_python builds. Simplest example
`bazel run @rules_python//python/bin:repl`

## 🔬 Minimal Reproduction

This depends on your system python, so it may be best to reproduce in a container. I am running Manjaro with python up to date. The exact python version is `3.14.2 (main, Jan 2 2026, 14:27:39) [GCC 15.2.1 20251112]`.

Relevant package information (from `pacman -Qi python`):



Name : python
Version : 3.14.2-2
Architecture : x86_64
Build Date : Fri 02 Jan 2026 03:27:39 PM CET
Install Date : Wed 11 Feb 2026 10:13:47 PM CET

Here's my entire python MODULE.bazel setup section (tried older versions of rules_python as well):



bazel_dep(name = "rules_python", version = "1.9.0-rc0")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
python_version = "3.13",
)
use_repo(python, "python_toolchains")
register_toolchains("@python_toolchains//:all")

## 🔥 Exception or Error



$ bazel run @rules_python//python/bin:repl
Starting local Bazel server (8.5.1) and connecting to it...
ERROR: $BUILD/external/rules_python+/python/private/python_register_toolchains.bzl:106:31: Traceback (most recent call last):
File "$BUILD/external/rules_python+/python/private/python.bzl", line 273, column 53, in _python_impl
register_result = python_register_toolchains(
File "$BUILD/external/rules_python+/python/private/python_register_toolchains.bzl", line 106, column 31, in python_register_toolchains
sha256 = tool_versions[python_version]["sha256"].get(platform, None)
Error: key "3.14.0b2" not found in dictionary
ERROR: Analysis of target '@@rules_python+//python/bin:repl' failed; build aborted: error evaluating module extension @@rules_python+//python/extensions:python.bzl%python

The expectation would be that the unknown python version is ignored as long as a valid python version is configured via `python.toolchain(version=$KNOWN_VERSION})`. Whatever else depends on the system python version before is quite likely an isolation failure wrt. reproducibility.

## 🌍 Your Environment

**Operating System:**
Linux $HOSTNAME 6.18.8-1-MANJARO #1 SMP PREEMPT_DYNAMIC Fri, 30 Jan 2026 23:06:21 +0000 x86_64 GNU/Linux

**Output of `bazel version`:**
bazel 8.5.1

Confirmed on 9.0.0 as well

**Rules_python version:**
1.9.0-rc0, 1.84.0

**Anything else relevant?**

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Reproduce el fallo con `bazel run @rules_python//python/bin:repl` usando la configuración de MODULE.bazel mostrada. Empieza por `python/extensions:python.bzl` y `python/private/python_register_toolchains.bzl`, especialmente por la línea 106 indicada, para rastrear por qué se comprueba la versión del sistema antes que la versión configurada. Se considera terminado cuando se pueda configurar una versión válida de `python.toolchain` sin que se produzca un fallo debido a una versión de Python del sistema desconocida.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
build-system
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
42/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.