From 4b01b90df2753fda95be71e2c505df5f4cfc95c7 Mon Sep 17 00:00:00 2001
From: Paul Moore
Date: Sun, 28 Oct 2012 22:02:48 +0000
Subject: [PATCH] Give wheels priority over sdists when installing
---
pip/index.py | 13 ++++++++++++-
tests/packages/priority-1.0-py2.py3-none-any.whl | 0
tests/packages/priority-1.0.tar.gz | 0
tests/test_finder.py | 10 ++++++++++
4 files changed, 22 insertions(+), 1 deletion(-)
create mode 100644 tests/packages/priority-1.0-py2.py3-none-any.whl
create mode 100644 tests/packages/priority-1.0.tar.gz
diff --git a/pip/index.py b/pip/index.py
index ef5de3041d2..44b89f281a9 100644
--- a/pip/index.py
+++ b/pip/index.py
@@ -185,7 +185,18 @@ def mkurl_pypi_url(url):
continue
applicable_versions.append((parsed_version, link, version))
#bring the latest version to the front, but maintains the priority ordering as secondary
- applicable_versions = sorted(applicable_versions, key=lambda v: v[0], reverse=True)
+ def sort_key(ver):
+ k1 = ver[0]
+ if self.use_wheel:
+ _, ext = ver[1].splitext()
+ if ext == '.whl':
+ k2 = 2
+ else:
+ k2 = 1
+ else:
+ k2 = 1
+ return (k1, k2)
+ applicable_versions = sorted(applicable_versions, key=sort_key, reverse=True)
existing_applicable = bool([link for parsed_version, link, version in applicable_versions if link is InfLink])
if not upgrade and existing_applicable:
if applicable_versions[0][1] is InfLink:
diff --git a/tests/packages/priority-1.0-py2.py3-none-any.whl b/tests/packages/priority-1.0-py2.py3-none-any.whl
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/packages/priority-1.0.tar.gz b/tests/packages/priority-1.0.tar.gz
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/test_finder.py b/tests/test_finder.py
index 54d58568b2a..53aad0348cf 100644
--- a/tests/test_finder.py
+++ b/tests/test_finder.py
@@ -127,3 +127,13 @@ def test_finder_priority_nonegg_over_eggfragments():
assert link.url.endswith('tar.gz')
+def test_wheel_priority():
+ """
+ Test wheels have priority over sdists.
+ """
+ find_links_url = 'file://' + os.path.join(here, 'packages')
+ find_links = [find_links_url]
+ req = InstallRequirement.from_line("priority")
+ finder = PackageFinder(find_links, [], use_wheel=True)
+ found = finder.find_requirement(req, True)
+ assert found.url.endswith("priority-1.0-py2.py3-none-any.whl"), found