feat(python): Support overriding from env vars for `single_version_platform_override`
- Similar to
python.defaults'spython_version_envattribute, we addpython_version_env,sha256_env,strip_prefix_env,url_envfor corresponding attributes ofsingle_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_MAPPINGfrom//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
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
_envattributes (python_version_env,sha256_env,strip_prefix_env,url_env) forsingle_version_platform_overrideto 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_versionhandling 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.
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.
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.