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