From d4191c33a9375a3268265c2b0476ae4418d4c9ce Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Wed, 2 Oct 2019 20:35:13 -0700 Subject: [PATCH] Optimize upgrade of already-satisfied pinned requirement MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Example: after installing six 1.12.0, `pip install -Uv six==1.12.0` now returns immediately, instead of going to the index to check for a version that can’t possibly be considered better. This optimization is most significant when upgrading via a requirements file with many pinned versions and some non-pinned versions. Signed-off-by: Anders Kaseorg --- news/7132.feature | 1 + src/pip/_internal/legacy_resolve.py | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 news/7132.feature diff --git a/news/7132.feature b/news/7132.feature new file mode 100644 index 00000000000..a873a669c56 --- /dev/null +++ b/news/7132.feature @@ -0,0 +1 @@ +Skip reaching out to the package index, if a pinned version is already satisfied. diff --git a/src/pip/_internal/legacy_resolve.py b/src/pip/_internal/legacy_resolve.py index c24158f4d37..ee754491956 100644 --- a/src/pip/_internal/legacy_resolve.py +++ b/src/pip/_internal/legacy_resolve.py @@ -267,6 +267,10 @@ def _check_skip_installed(self, req_to_install): # requirements we have to pull the tree down and inspect to assess # the version #, so it's handled way down. if not req_to_install.link: + if req_to_install.is_pinned: + # No need to check the index for a better version. + return 'pinned at installed version' + try: self.finder.find_requirement(req_to_install, upgrade=True) except BestVersionAlreadyInstalled: