bazel-contrib / bazel-contrib/rules_python

Loading rules_python should not depend on known python versions

Ouverte
#3,633 19 commentaires 1 réaction 0 personnes assignées Voir sur GitHub
help wanted
Langage dominant
Starlark
Étoiles
688
Forks
721
Merge moyen
15 h 7 min
PR mergées (30 j)
76

Description

# 🐞 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?**

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Reproduce the failure with `bazel run @rules_python//python/bin:repl` using the MODULE.bazel configuration shown. Start with `python/extensions:python.bzl` and `python/private/python_register_toolchains.bzl`, especially the reported line 106, to trace why the system version is checked before the configured version. Done means a valid `python.toolchain` version can be configured without failure from an unknown system Python version.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
build-system
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

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