@@ -125,16 +125,38 @@ index a8cd133..20dd1e6 100644
125
125
def pyc_source_file_paths() -> Generator[str, None, None]:
126
126
# We de-duplicate installation paths, since there can be overlap (e.g.
127
127
# file in .data maps to same location as file in wheel root).
128
+ diff --git a/pip/_internal/resolution/resolvelib/candidates.py b/pip/_internal/resolution/resolvelib/candidates.py
129
+ index de04e1d..d5bd355 100644
130
+ --- a/pip/_internal/resolution/resolvelib/candidates.py
131
+ +++ b/pip/_internal/resolution/resolvelib/candidates.py
132
+ @@ -20,6 +20,7 @@ from pip._internal.req.constructors import (
133
+ from pip._internal.req.req_install import InstallRequirement
134
+ from pip._internal.utils.direct_url_helpers import direct_url_from_link
135
+ from pip._internal.utils.misc import normalize_version_info
136
+ + from pip._internal.utils import graalpy
137
+
138
+ from .base import Candidate, CandidateVersion, Requirement, format_name
139
+
140
+ @@ -242,6 +243,8 @@ class _InstallRequirementBackedCandidate(Candidate):
141
+ for r in requires:
142
+ yield self._factory.make_requirement_from_spec(str(r), self._ireq)
143
+ yield self._factory.make_requires_python_requirement(self.dist.requires_python)
144
+ + if self.name == 'virtualenv' and not graalpy.DISABLE_PATCHING:
145
+ + yield self._factory.make_requirement_from_spec('graalpy-virtualenv', self._ireq)
146
+
147
+ def get_install_requirement(self) -> Optional[InstallRequirement]:
148
+ return self._ireq
128
149
diff --git a/pip/_internal/utils/graalpy.py b/pip/_internal/utils/graalpy.py
129
150
new file mode 100644
130
- index 0000000..5b35102
151
+ index 0000000..53dbe96
131
152
--- /dev/null
132
153
+++ b/pip/_internal/utils/graalpy.py
133
- @@ -0,0 +1,330 @@
154
+ @@ -0,0 +1,334 @@
134
155
+ import abc
135
156
+ import logging
136
157
+ import os
137
158
+ import re
159
+ + import sys
138
160
+ import tempfile
139
161
+ import zipfile
140
162
+ from contextlib import contextmanager
@@ -144,7 +166,7 @@ index 0000000..5b35102
144
166
+
145
167
+ from pip._internal.models.candidate import InstallationCandidate
146
168
+ from pip._internal.models.link import Link
147
- + from pip._internal.utils.urls import url_to_path
169
+ + from pip._internal.utils.urls import url_to_path, path_to_url
148
170
+ from pip._vendor import tomli, requests
149
171
+ from pip._vendor.packaging.specifiers import SpecifierSet
150
172
+ from pip._vendor.packaging.utils import canonicalize_name
@@ -440,6 +462,9 @@ index 0000000..5b35102
440
462
+ # We need to force the filename to match the usual convention, otherwise we won't find a patch
441
463
+ link = AddedSourceLink(url, f'{name}-{version}.{suffix}')
442
464
+ candidates.append(InstallationCandidate(name=name, version=version, link=link))
465
+ + if name == 'graalpy-virtualenv':
466
+ + link = Link(path_to_url(os.path.join(sys.base_prefix, 'graalpy_virtualenv')))
467
+ + candidates.append(InstallationCandidate(name=name, version='0.0.1', link=link))
443
468
+ return candidates
444
469
+
445
470
+
0 commit comments