-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Description
What is the user story
As a pip user I need a way to use the optional new dependency resolver so that I can install my pip packages.
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
- the default will initially be the old resolver.
- then it will change to be the new resolver
- finally the old resolver will go away
- the new resolver will be the only option
What we need to find out?
- Can the current flag continue to be used until the old resolver goes away?
- If the answer to 1 is no, what should the new flag be?
How can we do this out?
Research:
- how other pip commands have been rolled out
- how other CLI tools roll-out new internal functionality that replaces old
- what user research is needed?
- what design work is needed?
What we need to do this design or research
- talk with maintainers
- talk with pip users
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.
Activity
[-]Rollout of pip flag changes[/-][+]What flag will users use to call the new resolver?[/+]brainwane commentedon Jun 1, 2020
We're discussing this in Zulip as well.
brainwane commentedon Jun 2, 2020
TL;DR: we're going to use a new flag:
--resolver=
. We're figuring out now what will go on the other side of that equal sign.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
--resolver=
flag, and the approach of replacing--unstable-feature=
with--resolver=
WITHOUT a one-release deprecation period.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.
pradyunsg commentedon Jun 2, 2020
"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. :)
sbidoul commentedon Jun 2, 2020
legacy|backtracking
is fine with me. Have you consideredlegacy|resolvelib
?pfmoore commentedon Jun 2, 2020
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...)
nlhkabu commentedon Jun 2, 2020
I'm not sure that we're not just creating a whole lot more work for ourselves here?
My 2c:
--unstable-feature=resolver
until the resolver is ready for prod.--deprecated-feature=resolver
resolvelib
andpubgrub
mean absolutely nothing to the majority of pip users.My thinking:
We have just done a big program of community outreach asking people to test the new resolver with
--unstable-feature=resolver
. If we decide to get rid of this command, we will have to do another round of communication. Inevitably, some people will not realise that this command is no longer available and become frustrated.I have absolutely no issue with keeping the word "unstable" in the command. IMO, if it is not ready for use in production, then it is, by definition, unstable. We should not be embarrassed by this, or let it detract from the great work the team is doing.
I assume that the
--unstable-feature
flag was introduced as a process to deal with rolling out any new feature in future. By creating a new--resolver
flag, we are undermining that process.By introducing a
--deprecated-feature
flag we can create a universal process for deprecating features, that can be used again in futurePros of this plan:
Cons:
ei8fdb commentedon Jun 2, 2020
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)
uranusjr commentedon Jun 2, 2020
--resolver=2020
seems to read OK as well.brainwane commentedon Jun 2, 2020
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
--unstable-feature=resolver
and then
--deprecated-feature=resolver
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.
24 remaining items
Update documentation to reflect updated resolver feature flag
Update documentation to reflect updated resolver feature flag
Docs: Add details on old resolver deprecation and removal
Docs: Add details on old resolver deprecation and removal
Docs: Add details on old resolver deprecation and removal
Docs: Add details on old resolver deprecation and removal
Docs: Add details on old resolver deprecation and removal
Merge #158