-
Notifications
You must be signed in to change notification settings - Fork 3k
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 our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
What flag will users use to call the new resolver? #8371
Comments
TL;DR: we're going to use a new flag: I appreciate the work @ei8fdb has done to lay out this question and problem, and the work he and @pradyunsg and @pfmoore have done in Zulip to figure out what we will do. Paul suggested:
I approve that general approach and in particular I approve the So we can get started on that right away. But I do want to take another day to refine the words we use on the right-hand side of that equal sign, the labels for different resolvers. @ei8fdb refined this by suggesting, in the interest of using plain language that users are more likely to be familiar with:
@pradyunsg noted:
I understand what Pradyun is saying. It's a good reason not to use the word "beta" here. But "backtracking" is a word that does not carry useful meaning for most people who use pip. So I'm thinking about a replacement word. Something plain-language that describes an important attribute of the resolver without only talking about newness. I will sleep on this and have more suggestions in the morning. I am open to suggestions, but I want to avoid people talking back-and-forth and bikeshedding each other's suggestions; in the next 24 hours, if you have a suggestion, you can make it in this thread, but and you can make one reply to someone else's suggestion, but try not to reply again after that. |
"v2", "2020-rewrite" are two ideas. I know I've brought up "new" in the past, but it'd likely be better to avoid that, so that we don't end up with a new new resolver at some point in the future. :) |
|
I considered suggesting that, but there was talk about replacing resolvelib with PubGrub at some point, and I wasn't sure if that would need a new option, or would be considered "transparent". (And PubGrub is an even worse term, in terms of being obscure jargon...) |
I'm not sure that we're not just creating a whole lot more work for ourselves here? My 2c:
My thinking:
Pros of this plan:
Cons:
|
To communicate these different levels of readiness, I've seen the following communications working well:
If a user never sees these communications - when a user updates pip, they get automatically the newest version of the feature. If they don't upgrade - there is no difference anyway, they're still on the same version. (For future features this strategy could also be used for communication of alpha/beta releases) |
|
I thought I could make a decision to make things easier for everyone, but @nlhkabu has persuaded me that I was wrong. My current thinking is that we should go with the plan @nlhkabu has laid out, using
and then
and I think we should make sure to get a final decision on this in tomorrow's meeting. Heads-up to @dstufft @xavfernandez @cjerdonek @chrahunt and @dholth -- I'd appreciate if you could look at this discussion and share your opinion. However, we have a team meeting scheduled for about 14.5 hours from now, 9am-10am Eastern time, and I'd like to have this question decided by the end of that meeting so that everyone can implement it. So if you want to join in that meeting please message me and I'll get you the info to join it. |
What would the transition look like when we flip the switch and declare the new resolver “production ready”? Does I’m thinking in the shoes of a pip user who need to switch between multiple Python environments (and therefore multiple pip installations, potentially of different versions), and is already using the new resolver before it’s “production ready”. It would be very frustrating if they need to remember which version of pip they are on when they do |
Like Tzu-ping, I'm wondering what |
Can you explain "would actually mean and how the different pip versions will/should behave" a bit more? I don't understand. |
Here is my attempt at elaborating on that question:
What behavior would we implement for the What behavior would we implement for the
We're about to release a beta, then 20.2, then (later) 20.3, and so on. For each of the versions of pip that we release, if someone uses one of those flags, for each flag, when should pip allow usage but print a warning (such as "this feature is deprecated and will be removed in the next release")? When should pip "error out," which means giving an error message saying "This feature was removed"? When should pip simply allow usage without printing any particular warning or error? I think #8371 (comment) addresses some of these questions. |
I see some discussion in this thread around a version name, what if we leaned into that idea? |
Also, with this approach we'd need to have a check that people don't say The problem with over-general options like |
I realize we have at least 3 features that we want to deprecate and where we need to give user some control during a transition period. It might be interesting to have a uniform mechanism to cover these with a single feature flag mechanism, to avoid the proliferation of specific options with a short lifetime. These features are
|
So in the spirit of generic feature flags, this could look like this:
Using both enable and disable for the same feature is an error. When a feature is completely removed, and the feature is enabled/disabled by the user, a warning says the flag has no effect. |
We need to finalize this decision in the next few days. There's some discussion in Zulip as well. |
@sbidoul @xavfernandez @ei8fdb @dstufft @cjerdonek @chrahunt please take a look at this (complicated) issue as well as the discussion on Zulip. Resolving this question is a major blocker to finalizing documentation (announcements, a testing guide, etc.) and releasing a beta. |
Updating this thread to reflect the latest discussion on Zulip in anticipation for our team meeting this afternoon. Current consensus:
We also need to make a decision on what we will call the new and old resolvers, because resolver does not adequately describe the difference between the two. |
As per our Zulip chat, we're going to go with For the new resolver, we'll use Step 1:
Step 2:
Step 3:
Next steps:
|
This becomes a blocker task for the July release then. I'll file an issue -- shouldn't be too much work. :) |
158: Update pip to 20.2.1 r=duckinator a=pyup-bot This PR updates [pip](https://pypi.org/project/pip) from **20.2** to **20.2.1**. <details> <summary>Changelog</summary> ### 20.2.1 ``` =================== Features -------- - Ignore require-virtualenv in ``pip list`` (`8603 <https://github.com/pypa/pip/issues/8603>`_) Bug Fixes --------- - Correctly find already-installed distributions with dot (``.``) in the name and uninstall them when needed. (`8645 <https://github.com/pypa/pip/issues/8645>`_) - Trace a better error message on installation failure due to invalid ``.data`` files in wheels. (`8654 <https://github.com/pypa/pip/issues/8654>`_) - Fix SVN version detection for alternative SVN distributions. (`8665 <https://github.com/pypa/pip/issues/8665>`_) - New resolver: Correctly include the base package when specified with extras in ``--no-deps`` mode. (`8677 <https://github.com/pypa/pip/issues/8677>`_) - Use UTF-8 to handle ZIP archive entries on Python 2 according to PEP 427, so non-ASCII paths can be resolved as expected. (`8684 <https://github.com/pypa/pip/issues/8684>`_) Improved Documentation ---------------------- - Add details on old resolver deprecation and removal to migration documentation. (`8371 <https://github.com/pypa/pip/issues/8371>`_) - Fix feature flag name in docs. (`8660 <https://github.com/pypa/pip/issues/8660>`_) ``` </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/pip - Changelog: https://pyup.io/changelogs/pip/ - Homepage: https://pip.pypa.io/ </details> Co-authored-by: pyup-bot <github-bot@pyup.io>
What is the user story
Additional context
Right now, in order to use the new alpha dependency resolver a pip user needs to use the flag:
--unstable-feature=resolver
to call the new resolver, instead of calling the old resolver. The old resolver will be maintained for a period of time, but ultimately it will go away.
How will the pip resolver behaviour change over time
What we need to find out?
How can we do this out?
Research:
What we need to do this design or research
Are there possible solutions?
The goal is we want to choose an "answer that won't infuriate our users because they keep having to change scripts, or because the approach we choose otherwise imposes on their workflow in unnecessary ways."
Best practices would be to maintain consistency in the pip CLI. Must discuss more.
The text was updated successfully, but these errors were encountered: