1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
diff --git a/pipenv/patched/pip/_internal/index/package_finder.py b/pipenv/patched/pip/_internal/index/package_finder.py
index ec9ebc367..40a6c8182 100644
--- a/pipenv/patched/pip/_internal/index/package_finder.py
+++ b/pipenv/patched/pip/_internal/index/package_finder.py
@@ -125,6 +125,7 @@ class LinkEvaluator:
target_python: TargetPython,
allow_yanked: bool,
ignore_requires_python: Optional[bool] = None,
+ ignore_compatibility: Optional[bool] = None,
) -> None:
"""
:param project_name: The user supplied package name.
@@ -142,6 +143,8 @@ class LinkEvaluator:
:param ignore_requires_python: Whether to ignore incompatible
PEP 503 "data-requires-python" values in HTML links. Defaults
to False.
+ :param ignore_compatibility: Whether to ignore
+ compatibility of python versions and allow all versions of packages.
"""
if ignore_requires_python is None:
ignore_requires_python = False
@@ -151,6 +154,7 @@ class LinkEvaluator:
self._ignore_requires_python = ignore_requires_python
self._formats = formats
self._target_python = target_python
+ self._ignore_compatibility = ignore_compatibility
self.project_name = project_name
@@ -181,10 +185,10 @@ class LinkEvaluator:
LinkType.format_unsupported,
f"unsupported archive format: {ext}",
)
- if "binary" not in self._formats and ext == WHEEL_EXTENSION:
+ if "binary" not in self._formats and ext == WHEEL_EXTENSION and not self._ignore_compatibility:
reason = f"No binaries permitted for {self.project_name}"
return (LinkType.format_unsupported, reason)
- if "macosx10" in link.path and ext == ".zip":
+ if "macosx10" in link.path and ext == ".zip" and not self._ignore_compatibility:
return (LinkType.format_unsupported, "macosx10 one")
if ext == WHEEL_EXTENSION:
try:
@@ -199,7 +203,7 @@ class LinkEvaluator:
return (LinkType.different_project, reason)
supported_tags = self._target_python.get_unsorted_tags()
- if not wheel.supported(supported_tags):
+ if not wheel.supported(supported_tags) and not self._ignore_compatibility:
# Include the wheel's tags in the reason string to
# simplify troubleshooting compatibility issues.
file_tags = ", ".join(wheel.get_formatted_file_tags())
@@ -240,7 +244,7 @@ class LinkEvaluator:
version_info=self._target_python.py_version_info,
ignore_requires_python=self._ignore_requires_python,
)
- if not supports_python:
+ if not supports_python and not self._ignore_compatibility:
reason = f"{version} Requires-Python {link.requires_python}"
return (LinkType.requires_python_mismatch, reason)
@@ -487,7 +491,11 @@ class CandidateEvaluator:
return sorted(filtered_applicable_candidates, key=self._sort_key)
- def _sort_key(self, candidate: InstallationCandidate) -> CandidateSortingKey:
+ def _sort_key(
+ self,
+ candidate: InstallationCandidate,
+ ignore_compatibility: bool = True,
+ ) -> CandidateSortingKey:
"""
Function to pass as the `key` argument to a call to sorted() to sort
InstallationCandidates by preference.
@@ -532,10 +540,12 @@ class CandidateEvaluator:
)
)
except ValueError:
- raise UnsupportedWheel(
- f"{wheel.filename} is not a supported wheel for this platform. It "
- "can't be sorted."
- )
+ if not ignore_compatibility:
+ raise UnsupportedWheel(
+ f"{wheel.filename} is not a supported wheel for this platform. It "
+ "can't be sorted."
+ )
+ pri = -support_num
if self._prefer_binary:
binary_preference = 1
if wheel.build_tag is not None:
@@ -602,6 +612,7 @@ class PackageFinder:
format_control: Optional[FormatControl] = None,
candidate_prefs: Optional[CandidatePreferences] = None,
ignore_requires_python: Optional[bool] = None,
+ ignore_compatibility: Optional[bool] = False,
) -> None:
"""
This constructor is primarily meant to be used by the create() class
@@ -623,6 +634,7 @@ class PackageFinder:
self._ignore_requires_python = ignore_requires_python
self._link_collector = link_collector
self._target_python = target_python
+ self._ignore_compatibility = ignore_compatibility
self.format_control = format_control
@@ -723,6 +735,7 @@ class PackageFinder:
target_python=self._target_python,
allow_yanked=self._allow_yanked,
ignore_requires_python=self._ignore_requires_python,
+ ignore_compatibility=self._ignore_compatibility,
)
def _sort_links(self, links: Iterable[Link]) -> List[Link]:
|