rules_python icon indicating copy to clipboard operation
rules_python copied to clipboard

feat(python): Support overriding from env vars for `single_version_platform_override`

Open meteorcloudy opened this issue 3 months ago • 3 comments

  • Similar to python.defaults's python_version_env attribute, we add python_version_env, sha256_env, strip_prefix_env, url_env for corresponding attributes of single_version_platform_override, allowing reading those values from env vars.
  • Allow the python version specified to be a minor version, which will be mapped to a full version with MINOR_MAPPING from //python:versions.bzl.

This feature will make sure JAX's HERMETIC_PYTHON_* env vars keep working after migrating to Bzlmod. https://docs.jax.dev/en/latest/developer.html#custom-hermetic-python-examples

meteorcloudy avatar Sep 26 '25 11:09 meteorcloudy

Summary of Changes

Hello @meteorcloudy, I'm Gemini Code Assist[^1]! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the flexibility of Python toolchain configuration within Bzlmod by introducing the ability to override critical attributes like Python version, SHA256 checksum, strip prefix, and download URLs directly from environment variables. This change is crucial for maintaining compatibility with existing workflows, such as JAX's hermetic Python setups, ensuring a smooth transition to Bzlmod while providing external control over toolchain definitions.

Highlights

  • Environment Variable Overrides: Introduced new _env attributes (python_version_env, sha256_env, strip_prefix_env, url_env) for single_version_platform_override to allow values to be read from environment variables.
  • JAX Compatibility: This feature specifically addresses the need for JAX's HERMETIC_PYTHON_* environment variables to continue working after migrating to Bzlmod.
  • Flexible Python Versioning: Enhanced python_version handling to support minor versions when read from environment variables, mapping them to full versions if available.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with :thumbsup: and :thumbsdown: on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

[^1]: Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

gemini-code-assist[bot] avatar Sep 26 '25 11:09 gemini-code-assist[bot]

I'm pretty mixed on this. I'd like to talk in https://github.com/bazel-contrib/rules_python/issues/3293 more to try and figure out how to glue things together better.

As is, what this implies is all the APIs we have that accept some sort of version, url, etc, arg should have a _env and _target variations of them. (so the pip, python, and uv bzlmod extensions, which encompasses a very large api surface).

Having python_version_env for single_version_platform_override is also a bit weird -- the API name means it applies to a specific version. Getting the version from an environment variable means its for an arbitrary version.

rickeylev avatar Sep 26 '25 23:09 rickeylev

Yeah, I agree this is more of an API change that specifically address JAX/XLA's needs, happy to wait for a more proper solution.

meteorcloudy avatar Sep 29 '25 08:09 meteorcloudy