Fixes pipenv lock nondeterminism with environment markers #5299
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Thank you for contributing to Pipenv!
The issue
Fixes #5239
The fix
Packages are added into resolver in this order:
PIPENV_PACKAGES
Resolver
with the nameconstraints
.parsed_requirements
InstallRequirement
byinstall_req_from_parsed_requirement
After that, we would have all package's markers from resolver.
Thanks @bakhtiary for providing a nice way to overcome this issue by sorting packages.
I think if we want to sort packages, we better sort them after step 5, which is the last step we could intervene.
But even if those packages are sorted, this might not be the best solution. Because markers are generated by pip's resolver, which is something we couldn't control (for example those packages might be reordered inside resolver).
The checklist
news/
directory to describe this fix with the extension.bugfix.rst
,.feature.rst
,.behavior.rst
,.doc.rst
..vendor.rst
. or.trivial.rst
(this will appear in the release changelog). Use semantic line breaks and name the file after the issue number or the PR #.