Caching properties to deduplicate sources #5863
Merged
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.
Without caching, the Resolver duplicates the sources listed in the
Pipfile
multiple times (since the property re-adds them every time they're called) in the arguments sent to thepip
parser.Removing unused command-line option
--debug
Thank you for contributing to Pipenv!
The issue
While diagnosing another issue, I found through
print
debugging that the multiple calls to these properties,pip_args
andpip_options
, ended up duplicating the sources listed in thePipfile
multiple times for thepip
parser.Related to the resolver, the
--debug
command-line option forpipenv-resolver
is unused.The fix
To fix this, I replaced
property
decorator withcached_property
, which was already imported in the module. As best as I can tell, these properties (and a number of other ones) only need to be evaluated once instead of every single time they are called. Caching not only fixes this duplication but will also lead to faster, more efficient code.If a debug option is later implemented, the command-line option can be added at that time.
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 #.