Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
GH-80789: Get rid of theensurepip infra for many wheels#109245
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
GH-80789: Get rid of theensurepip infra for many wheels#109245
Uh oh!
There was an error while loading.Please reload this page.
Conversation
b9fe227 to6b2ce22Compareensurepip infra for many wheelsensurepip infra for many wheels71911de tobf909c0Comparewebknjaz commentedSep 10, 2023
Uh oh!
There was an error while loading.Please reload this page.
Misc/NEWS.d/next/Library/2023-09-10-23-35-20.gh-issue-109245.yCVQbo.rst OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
ensurepip infra for many wheelsensurepip infra for many wheelsAA-Turner commentedSep 16, 2023
I've taken the liberty of pushing two changes to your branch; feel free to revert in whole or part. Both look to simplify what ensurepip is doing internally -- e.g. with only I've also removed type annotations, as these are ignored and we shouldn't introduce more (tomllib and importlib.resources are special cases). I think there are further simplifications we could make, but I thought this was a reasonable middle-ground -- let me know your thoughts! A |
vstinner left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
LGTM. But I would prefer to get a second review on this one.
pfmoore left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
One minor comment, but it doesn't block this - feel free to leave it if you think your version is better.
Lib/ensurepip/__init__.py Outdated
| # of the same package, but don't attempt to implement correct version | ||
| # comparison since this case should not happen. | ||
| filenames=sorted(filenames) | ||
| filenames=sorted(filenames,reverse=True) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Why reverse? I guess it gives better odds of getting the correct version, but as the comment above says, we're not doing version comparison because it should never be needed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I noted this in the commit message but not a PR comment; sorry. The implementation of this function now short-circuits and returns the first match, but that means we need to reverse the order as previously the final match would be returned, and we want to preserve that behaviour. We retain no guarantees about finding the correct version.
webknjaz commentedSep 16, 2023
I think annotations contribute to maintainability.
I was specifically avoiding any refactoring in this PR, trying to make it as small as possible and keep the potential conflicts with the rest of related PRs at minimum. I don't like some of the changes but if this gets it merged faster so be it. |
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
webknjaz commentedSep 16, 2023
FreeBSD failing check reason:
|
pfmoore commentedSep 16, 2023
I'm pretty sure there's still a policy that we don't use type annotations in the stdlib. |
webknjaz commentedSep 16, 2023
Interesting..https://devguide.python.org/search/?q=type+annotations&check_keywords=yes&area=default doesn't return anything related (nor does using Google search against that site). |
AA-Turner commentedSep 17, 2023
Seehttps://discuss.python.org/t/21487;#108125 (comment). Quoting Brett: "It's codified based on discussions among the core developers that we have all agreed to over the years" A |
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Lib/ensurepip/__init__.py Outdated
| # of the same package, but don't attempt to implement correct version | ||
| # comparison since this case should not happen. | ||
| filenames=sorted(filenames) | ||
| filenames=sorted(filenames,reverse=True) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I noted this in the commit message but not a PR comment; sorry. The implementation of this function now short-circuits and returns the first match, but that means we need to reverse the order as previously the final match would be returned, and we want to preserve that behaviour. We retain no guarantees about finding the correct version.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
webknjaz commentedOct 11, 2023
@AA-Turner so I tried something which resulted in some simplification. I used pathlib but also made functions to return paths instead of complex structures with data that is never used together by the callers. I made sure that the coverage of the changed parts is at 100%, while making it less branchy... |
webknjaz commentedOct 15, 2023
I have made the requested changes; please review again |
Uh oh!
There was an error while loading.Please reload this page.
This is a refactoring change that aims to simplify ``ensurepip``.Before it, this module had legacy infrastructure that made anassumption that ``ensurepip`` would be provisioning more then just asingle wheel. That assumption is no longer true since [[1]][[2]][[3]].In this change, the improvement is done around removing unnecessaryloops and supporting structures to change the assumptions to expectonly the bundled or replacement ``pip`` wheel.[1]:python@ece20db[2]:python#101039[3]:python#95299
This change is intended to make it clear that the helper now onlyreturns one package and no more.Co-Authored-By: vstinner@python.org
- Exit early if there are no files in the directory- Return a match early by iterating in reverse order- Merge filename checks- Inline the path variable- Remove type annotations
- Return a dict with consistent fields- Remove caching- Remove type annotations- Leverage the known wheel package dir value to calculate full paths
It provides us with the ability to write simpler high-level logic thatis easier to understand. As a side effect, it became possible to makethe code less branchy.
It was returning bytes on FreeBSD which was incorrectly injected intothe Python code snippet executed in a subprocess and had a b-preffix.
Some code comments and test function names were still referring to theremoved function name. Not anymore!
This script is separate and is only used in CI as opposed to runtime.
Co-authored-by: Pradyun Gedam <pradyunsg@gmail.com>
Co-authored-by: Pradyun Gedam <pradyunsg@gmail.com>
It was tripping the linters and became unnecessary after hardcodingthe pip wheel filename prefix in the string.
45f9944 to2472d87Comparewebknjaz commentedJan 25, 2024
@pradyunsg there was a merge conflict that I solved with rebase. No other changes made. |
pradyunsg left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
One last change, but LGTM otherwise!
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
webknjaz commentedJan 30, 2024
@pradyunsg 🛎 the CI remains green after your branch sync FYI. |
webknjaz commentedFeb 1, 2024
@AA-Turner@pradyunsg@vstinner apply the backport labels? |
vstinner commentedFeb 1, 2024
I don't think that such refactoring change should be backported to stable branches. Only bugfixes. |
…ython#109245)Co-authored-by: vstinner@python.orgCo-authored-by: Pradyun Gedam <pradyunsg@gmail.com>Co-authored-by: Adam Turner <9087854+aa-turner@users.noreply.github.com>
Uh oh!
There was an error while loading.Please reload this page.
This is a refactoring change that aims to simplify
ensurepip. Before it, this module had legacy infrastructure that made an assumption thatensurepipwould be provisioning more then just a single wheel. That assumption is no longer true since [1][2][3].In this change, the improvement is done around removing unnecessary loops and supporting structures to change the assumptions to expect only the bundled or replacement
pipwheel.This is a spin-off of#12791.