mirror of https://github.com/pypa/pip
Implement wheel cache lookup in the new resolver
This commit is contained in:
parent
dab7b94ade
commit
bc9b288b1e
|
@ -238,9 +238,21 @@ class LinkCandidate(_InstallRequirementBackedCandidate):
|
||||||
version=None, # type: Optional[_BaseVersion]
|
version=None, # type: Optional[_BaseVersion]
|
||||||
):
|
):
|
||||||
# type: (...) -> None
|
# type: (...) -> None
|
||||||
|
cache_entry = factory.get_wheel_cache_entry(link, name)
|
||||||
|
if cache_entry is not None:
|
||||||
|
logger.debug("Using cached wheel link: %s", cache_entry.link)
|
||||||
|
link = cache_entry.link
|
||||||
|
ireq = make_install_req_from_link(link, parent)
|
||||||
|
|
||||||
|
# TODO: Is this logic setting original_link_is_in_wheel_cache correct?
|
||||||
|
if (cache_entry is not None and
|
||||||
|
cache_entry.persistent and
|
||||||
|
parent.link is parent.original_link):
|
||||||
|
ireq.original_link_is_in_wheel_cache = True
|
||||||
|
|
||||||
super(LinkCandidate, self).__init__(
|
super(LinkCandidate, self).__init__(
|
||||||
link=link,
|
link=link,
|
||||||
ireq=make_install_req_from_link(link, parent),
|
ireq=ireq,
|
||||||
factory=factory,
|
factory=factory,
|
||||||
name=name,
|
name=name,
|
||||||
version=version,
|
version=version,
|
||||||
|
|
|
@ -8,6 +8,7 @@ from pip._internal.exceptions import (
|
||||||
InstallationError,
|
InstallationError,
|
||||||
UnsupportedPythonVersion,
|
UnsupportedPythonVersion,
|
||||||
)
|
)
|
||||||
|
from pip._internal.utils.compatibility_tags import get_supported
|
||||||
from pip._internal.utils.misc import (
|
from pip._internal.utils.misc import (
|
||||||
dist_in_site_packages,
|
dist_in_site_packages,
|
||||||
dist_in_usersite,
|
dist_in_usersite,
|
||||||
|
@ -37,6 +38,7 @@ if MYPY_CHECK_RUNNING:
|
||||||
from pip._vendor.pkg_resources import Distribution
|
from pip._vendor.pkg_resources import Distribution
|
||||||
from pip._vendor.resolvelib import ResolutionImpossible
|
from pip._vendor.resolvelib import ResolutionImpossible
|
||||||
|
|
||||||
|
from pip._internal.cache import CacheEntry, WheelCache
|
||||||
from pip._internal.index.package_finder import PackageFinder
|
from pip._internal.index.package_finder import PackageFinder
|
||||||
from pip._internal.models.link import Link
|
from pip._internal.models.link import Link
|
||||||
from pip._internal.operations.prepare import RequirementPreparer
|
from pip._internal.operations.prepare import RequirementPreparer
|
||||||
|
@ -60,6 +62,7 @@ class Factory(object):
|
||||||
finder, # type: PackageFinder
|
finder, # type: PackageFinder
|
||||||
preparer, # type: RequirementPreparer
|
preparer, # type: RequirementPreparer
|
||||||
make_install_req, # type: InstallRequirementProvider
|
make_install_req, # type: InstallRequirementProvider
|
||||||
|
wheel_cache, # type: Optional[WheelCache]
|
||||||
use_user_site, # type: bool
|
use_user_site, # type: bool
|
||||||
force_reinstall, # type: bool
|
force_reinstall, # type: bool
|
||||||
ignore_installed, # type: bool
|
ignore_installed, # type: bool
|
||||||
|
@ -70,6 +73,7 @@ class Factory(object):
|
||||||
|
|
||||||
self.finder = finder
|
self.finder = finder
|
||||||
self.preparer = preparer
|
self.preparer = preparer
|
||||||
|
self._wheel_cache = wheel_cache
|
||||||
self._python_candidate = RequiresPythonCandidate(py_version_info)
|
self._python_candidate = RequiresPythonCandidate(py_version_info)
|
||||||
self._make_install_req_from_spec = make_install_req
|
self._make_install_req_from_spec = make_install_req
|
||||||
self._use_user_site = use_user_site
|
self._use_user_site = use_user_site
|
||||||
|
@ -218,6 +222,24 @@ class Factory(object):
|
||||||
return None
|
return None
|
||||||
return RequiresPythonRequirement(specifier, self._python_candidate)
|
return RequiresPythonRequirement(specifier, self._python_candidate)
|
||||||
|
|
||||||
|
def get_wheel_cache_entry(self, link, name):
|
||||||
|
# type: (Link, Optional[str]) -> Optional[CacheEntry]
|
||||||
|
"""Look up the link in the wheel cache.
|
||||||
|
|
||||||
|
If ``preparer.require_hashes`` is True, don't use the wheel cache,
|
||||||
|
because cached wheels, always built locally, have different hashes
|
||||||
|
than the files downloaded from the index server and thus throw false
|
||||||
|
hash mismatches. Furthermore, cached wheels at present have
|
||||||
|
undeterministic contents due to file modification times.
|
||||||
|
"""
|
||||||
|
if self._wheel_cache is None or self.preparer.require_hashes:
|
||||||
|
return None
|
||||||
|
return self._wheel_cache.get_cache_entry(
|
||||||
|
link=link,
|
||||||
|
package_name=name,
|
||||||
|
supported_tags=get_supported(),
|
||||||
|
)
|
||||||
|
|
||||||
def should_reinstall(self, candidate):
|
def should_reinstall(self, candidate):
|
||||||
# type: (Candidate) -> bool
|
# type: (Candidate) -> bool
|
||||||
# TODO: Are there more cases this needs to return True? Editable?
|
# TODO: Are there more cases this needs to return True? Editable?
|
||||||
|
|
|
@ -88,6 +88,7 @@ class Resolver(BaseResolver):
|
||||||
finder=finder,
|
finder=finder,
|
||||||
preparer=preparer,
|
preparer=preparer,
|
||||||
make_install_req=make_install_req,
|
make_install_req=make_install_req,
|
||||||
|
wheel_cache=wheel_cache,
|
||||||
use_user_site=use_user_site,
|
use_user_site=use_user_site,
|
||||||
force_reinstall=force_reinstall,
|
force_reinstall=force_reinstall,
|
||||||
ignore_installed=ignore_installed,
|
ignore_installed=ignore_installed,
|
||||||
|
|
|
@ -52,6 +52,7 @@ def factory(finder, preparer):
|
||||||
finder=finder,
|
finder=finder,
|
||||||
preparer=preparer,
|
preparer=preparer,
|
||||||
make_install_req=install_req_from_line,
|
make_install_req=install_req_from_line,
|
||||||
|
wheel_cache=None,
|
||||||
use_user_site=False,
|
use_user_site=False,
|
||||||
force_reinstall=False,
|
force_reinstall=False,
|
||||||
ignore_installed=False,
|
ignore_installed=False,
|
||||||
|
|
Loading…
Reference in New Issue