Add an experiment to disable pip build isolation #37331
Add an experiment to disable pip build isolation #37331shunping merged 4 commits intoapache:masterfrom
Conversation
…ar to enable it if needed.
Summary of ChangesHello @shunping, I'm Gemini Code Assist1! 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 modifies the Python container's boot logic to adjust how Python packages are installed, specifically targeting workflow tarballs. The primary goal is to disable Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Using Gemini Code AssistThe 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
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 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 👍 and 👎 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. Footnotes
|
|
R: @tvalentyn |
|
Stopping reviewer notifications for this pull request: review requested by someone other than the bot, ceding control. If you'd like to restart, comment |
|
Thought a bit more about this, people who use |
Good point. Given build isolation primarily affects non-wheel packages, users passing source tarballs / zip files through |
sdks/python/container/boot.go
Outdated
| } | ||
|
|
||
| pipNoBuildIsolation = false | ||
| if strings.Contains(options, "pip_no_build_isolation") { |
There was a problem hiding this comment.
should we make the check more narrow (e.g. to find experiments, and check the experiments) instead of finding substrings in the entire blob of options? I worry this pattern might be repeated in some other context where it might cause a collision.
There was a problem hiding this comment.
Sure, please see the latest commit.
However, I should note that the previous method is already used in a few other boot.go files. For example:
beam/sdks/java/container/boot.go
Line 147 in 672b888
beam/sdks/go/container/boot.go
Line 209 in 52b9910
| logger.Fatalf(ctx, "Failed to convert pipeline options: %v", err) | ||
| } | ||
|
|
||
| experiments := getExperiments(options) |
There was a problem hiding this comment.
do you think there might be a better home for the getExperiments helper than boot.go?
There was a problem hiding this comment.
maybe in github.com/apache/beam/sdks/v2/go/pkg/beam/util/optionsx ?
Overtime people might add other helpers like this
, and use it in other boot.go files.There was a problem hiding this comment.
Sure. Let's do that in a separate PR. We will do another round of refactoring on other boot.go in there.
There was a problem hiding this comment.
On a second thought, I think we may put that into https://github.com/apache/beam/blob/master/sdks/go/container/tools/pipeline_options.go.
The parsing of pipeline options in json format seems to be only used in boot.go for different SDKs.
|
LGTM, thank you! |
|
@shunping Could you please add a note to CHANGES.md with your improvement, as well as 'BREAKING CHANGE' note to the release that upgraded pip to alert that people might see certain errors? Thanks! |


Background:
Pip 25.3 removed non-PEP 517 package build support(https://discuss.python.org/t/announcement-pip-25-3-release/104550), meaning that by default installing a source distribution will first build the wheel in an isolated environment and then install the wheel.
Some users reported problems when using Beam Python SDK docker container in an environment that have no internet access, because building the wheel requires downloading pacakages from pip.
Solution:
This PR proposes an experiment option
pip_no_build_isolationto disable build isolation when installing package with pip.Affected users can do either of the following options:
Install
pip==25.2in their pipeline runtime environment.If the customer uses the pipeline setup file and a custom container, they can install their pipeline package in the container directly. See an example that follows this suggestion.
Upgrade to Beam 2.72.0 and provide the
--experiments=pip_no_build_isolationpipeline option (added in this PR) . When this experiment is used, we will append--no-build-isolationto thepip installcommand.Internal bug id: 475376468