pex 2.64.1__py2.py3-none-any.whl → 2.66.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pex might be problematic. Click here for more details.
- pex/docs/html/_pagefind/fragment/en_1caf19d.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_2268ed8.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_469c87d.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_4a75d8d.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_9fe4bcc.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_a951443.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_af1fb65.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_e0b014e.pf_fragment +0 -0
- pex/docs/html/_pagefind/index/{en_17effb2.pf_index → en_f48c2e4.pf_index} +0 -0
- pex/docs/html/_pagefind/pagefind-entry.json +1 -1
- pex/docs/html/_pagefind/pagefind.en_4eb6e6f279.pf_meta +0 -0
- pex/docs/html/_static/documentation_options.js +1 -1
- pex/docs/html/api/vars.html +5 -5
- pex/docs/html/buildingpex.html +5 -5
- pex/docs/html/genindex.html +5 -5
- pex/docs/html/index.html +5 -5
- pex/docs/html/recipes.html +5 -5
- pex/docs/html/scie.html +5 -5
- pex/docs/html/search.html +5 -5
- pex/docs/html/whatispex.html +5 -5
- pex/hashing.py +71 -9
- pex/pex_builder.py +1 -4
- pex/pip/tool.py +3 -3
- pex/pip/vcs.py +93 -44
- pex/pip/version.py +7 -0
- pex/resolve/lock_downloader.py +1 -0
- pex/resolve/locker.py +13 -2
- pex/scie/__init__.py +40 -1
- pex/scie/model.py +2 -0
- pex/scie/science.py +25 -3
- pex/version.py +1 -1
- {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/METADATA +4 -4
- {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/RECORD +38 -38
- pex/docs/html/_pagefind/fragment/en_1048255.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_17782b6.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_3f7efc3.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_40667cd.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_55ee2f4.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_d6d92dd.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_d834316.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_ec2ce54.pf_fragment +0 -0
- pex/docs/html/_pagefind/pagefind.en_49ec86cf86.pf_meta +0 -0
- {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/WHEEL +0 -0
- {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/entry_points.txt +0 -0
- {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/licenses/LICENSE +0 -0
- {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/pylock/pylock.toml +0 -0
- {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/top_level.txt +0 -0
pex/pip/vcs.py
CHANGED
|
@@ -3,26 +3,42 @@
|
|
|
3
3
|
|
|
4
4
|
from __future__ import absolute_import
|
|
5
5
|
|
|
6
|
-
import glob
|
|
7
6
|
import os
|
|
8
7
|
import re
|
|
9
8
|
|
|
10
9
|
from pex import hashing
|
|
11
10
|
from pex.artifact_url import VCS, Fingerprint
|
|
12
|
-
from pex.common import is_pyc_dir, is_pyc_file
|
|
11
|
+
from pex.common import is_pyc_dir, is_pyc_file
|
|
12
|
+
from pex.exceptions import reportable_unexpected_error_msg
|
|
13
13
|
from pex.hashing import Sha256
|
|
14
14
|
from pex.pep_440 import Version
|
|
15
15
|
from pex.pep_503 import ProjectName
|
|
16
16
|
from pex.result import Error, try_
|
|
17
|
-
from pex.tracer import TRACER
|
|
18
17
|
from pex.typing import TYPE_CHECKING
|
|
19
18
|
|
|
20
19
|
if TYPE_CHECKING:
|
|
21
|
-
|
|
20
|
+
# N.B.: The `re.Pattern` type is not available in all Python versions Pex supports.
|
|
21
|
+
from re import Pattern # type: ignore[attr-defined]
|
|
22
|
+
from typing import Callable, Optional, Text, Tuple, Union
|
|
22
23
|
|
|
23
24
|
from pex.hashing import HintedDigest
|
|
24
25
|
|
|
25
26
|
|
|
27
|
+
def _project_name_re(project_name):
|
|
28
|
+
# type: (ProjectName) -> str
|
|
29
|
+
return project_name.normalized.replace("-", "[-_.]+")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def _built_source_dist_pattern(project_name):
|
|
33
|
+
# type: (ProjectName) -> Pattern
|
|
34
|
+
return re.compile(
|
|
35
|
+
r"(?P<project_name>{project_name_re})-(?P<version>.+)\.zip".format(
|
|
36
|
+
project_name_re=_project_name_re(project_name)
|
|
37
|
+
),
|
|
38
|
+
re.IGNORECASE,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
26
42
|
def _find_built_source_dist(
|
|
27
43
|
build_dir, # type: str
|
|
28
44
|
project_name, # type: ProjectName
|
|
@@ -34,12 +50,7 @@ def _find_built_source_dist(
|
|
|
34
50
|
# encoded in: `pip._internal.req.req_install.InstallRequirement.archive`.
|
|
35
51
|
|
|
36
52
|
listing = os.listdir(build_dir)
|
|
37
|
-
pattern =
|
|
38
|
-
r"{project_name}-(?P<version>.+)\.zip".format(
|
|
39
|
-
project_name=project_name.normalized.replace("-", "[-_.]+")
|
|
40
|
-
),
|
|
41
|
-
re.IGNORECASE,
|
|
42
|
-
)
|
|
53
|
+
pattern = _built_source_dist_pattern(project_name)
|
|
43
54
|
for name in listing:
|
|
44
55
|
match = pattern.match(name)
|
|
45
56
|
if match and Version(match.group("version")) == version:
|
|
@@ -58,23 +69,66 @@ def _find_built_source_dist(
|
|
|
58
69
|
|
|
59
70
|
def fingerprint_downloaded_vcs_archive(
|
|
60
71
|
download_dir, # type: str
|
|
61
|
-
project_name, # type:
|
|
62
|
-
version, # type:
|
|
72
|
+
project_name, # type: ProjectName
|
|
73
|
+
version, # type: Version
|
|
63
74
|
vcs, # type: VCS.Value
|
|
64
75
|
):
|
|
65
76
|
# type: (...) -> Tuple[Fingerprint, str]
|
|
66
77
|
|
|
67
78
|
archive_path = try_(
|
|
68
|
-
_find_built_source_dist(
|
|
69
|
-
build_dir=download_dir, project_name=ProjectName(project_name), version=Version(version)
|
|
70
|
-
)
|
|
79
|
+
_find_built_source_dist(build_dir=download_dir, project_name=project_name, version=version)
|
|
71
80
|
)
|
|
72
81
|
digest = Sha256()
|
|
73
|
-
digest_vcs_archive(archive_path=archive_path, vcs=vcs, digest=digest)
|
|
82
|
+
digest_vcs_archive(project_name=project_name, archive_path=archive_path, vcs=vcs, digest=digest)
|
|
74
83
|
return Fingerprint.from_digest(digest), archive_path
|
|
75
84
|
|
|
76
85
|
|
|
86
|
+
def _vcs_dir_filter(
|
|
87
|
+
vcs, # type: VCS.Value
|
|
88
|
+
project_name, # type: ProjectName
|
|
89
|
+
):
|
|
90
|
+
# type: (...) -> Callable[[Text], bool]
|
|
91
|
+
|
|
92
|
+
# Ignore VCS control directories for the purposes of fingerprinting the version controlled
|
|
93
|
+
# source tree. VCS control directories can contain non-reproducible content (Git at least
|
|
94
|
+
# has files that contain timestamps).
|
|
95
|
+
#
|
|
96
|
+
# We cannot prune these directories from the source archive directly unfortunately since
|
|
97
|
+
# some build processes use VCS version information to derive their version numbers (C.F.:
|
|
98
|
+
# https://pypi.org/project/setuptools-scm/). As such, we'll get a stable fingerprint, but be
|
|
99
|
+
# forced to re-build a wheel each time the VCS requirement is re-locked later, even when it
|
|
100
|
+
# hashes the same.
|
|
101
|
+
vcs_control_dir = ".{vcs}".format(vcs=vcs)
|
|
102
|
+
|
|
103
|
+
# N.B.: If the VCS project uses setuptools as its build backend, depending on the version of
|
|
104
|
+
# Pip used, the VCS checkout can have a `<project name>.egg-info/` directory littering its root
|
|
105
|
+
# left over from Pip generating project metadata to determine version and dependencies. No other
|
|
106
|
+
# well known build-backend has this problem at this time (checked hatchling, poetry-core,
|
|
107
|
+
# pdm-backend and uv_build).
|
|
108
|
+
# C.F.: https://github.com/pypa/pip/pull/13602
|
|
109
|
+
egg_info_dir_re = re.compile(
|
|
110
|
+
r"^{project_name_re}\.egg-info$".format(project_name_re=_project_name_re(project_name)),
|
|
111
|
+
re.IGNORECASE,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
def vcs_dir_filter(dir_path):
|
|
115
|
+
# type: (Text) -> bool
|
|
116
|
+
if is_pyc_dir(dir_path):
|
|
117
|
+
return False
|
|
118
|
+
|
|
119
|
+
base_dir_name = dir_path.split(os.sep)[0]
|
|
120
|
+
return base_dir_name != vcs_control_dir and not egg_info_dir_re.match(base_dir_name)
|
|
121
|
+
|
|
122
|
+
return vcs_dir_filter
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def _vcs_file_filter(vcs):
|
|
126
|
+
# type: (VCS.Value) -> Callable[[Text], bool]
|
|
127
|
+
return lambda f: not is_pyc_file(f)
|
|
128
|
+
|
|
129
|
+
|
|
77
130
|
def digest_vcs_archive(
|
|
131
|
+
project_name, # type: ProjectName
|
|
78
132
|
archive_path, # type: str
|
|
79
133
|
vcs, # type: VCS.Value
|
|
80
134
|
digest, # type: HintedDigest
|
|
@@ -84,22 +138,32 @@ def digest_vcs_archive(
|
|
|
84
138
|
# All VCS requirements are prepared as zip archives as encoded in:
|
|
85
139
|
# `pip._internal.req.req_install.InstallRequirement.archive` and the archive is already offset
|
|
86
140
|
# by a subdirectory (if any).
|
|
87
|
-
with TRACER.timed(
|
|
88
|
-
"Digesting {archive} {vcs} archive".format(archive=os.path.basename(archive_path), vcs=vcs)
|
|
89
|
-
), temporary_dir() as chroot, open_zip(archive_path) as archive:
|
|
90
|
-
# TODO(John Sirois): Consider implementing zip_hash to avoid the extractall.
|
|
91
|
-
archive.extractall(chroot)
|
|
92
141
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
142
|
+
# The zip archives created by Pip have a single project name top-level directory housing
|
|
143
|
+
# the full clone. We look for that to get a consistent clone hash with a bare clone.
|
|
144
|
+
match = _built_source_dist_pattern(project_name).match(os.path.basename(archive_path))
|
|
145
|
+
if match is None:
|
|
146
|
+
raise AssertionError(
|
|
147
|
+
reportable_unexpected_error_msg(
|
|
148
|
+
"Failed to determine the project name prefix for the VCS zip {zip} with expected "
|
|
149
|
+
"canonical project name {project_name}".format(
|
|
150
|
+
zip=archive_path, project_name=project_name
|
|
151
|
+
)
|
|
152
|
+
)
|
|
153
|
+
)
|
|
154
|
+
top_dir = match.group("project_name")
|
|
98
155
|
|
|
99
|
-
|
|
156
|
+
hashing.zip_hash(
|
|
157
|
+
zip_path=archive_path,
|
|
158
|
+
digest=digest,
|
|
159
|
+
relpath=top_dir,
|
|
160
|
+
dir_filter=_vcs_dir_filter(vcs, project_name),
|
|
161
|
+
file_filter=_vcs_file_filter(vcs),
|
|
162
|
+
)
|
|
100
163
|
|
|
101
164
|
|
|
102
165
|
def digest_vcs_repo(
|
|
166
|
+
project_name, # type: ProjectName
|
|
103
167
|
repo_path, # type: str
|
|
104
168
|
vcs, # type: VCS.Value
|
|
105
169
|
digest, # type: HintedDigest
|
|
@@ -107,24 +171,9 @@ def digest_vcs_repo(
|
|
|
107
171
|
):
|
|
108
172
|
# type: (...) -> None
|
|
109
173
|
|
|
110
|
-
# Ignore VCS control directories for the purposes of fingerprinting the version controlled
|
|
111
|
-
# source tree. VCS control directories can contain non-reproducible content (Git at least
|
|
112
|
-
# has files that contain timestamps).
|
|
113
|
-
#
|
|
114
|
-
# We cannot prune these directories from the source archive directly unfortunately since
|
|
115
|
-
# some build processes use VCS version information to derive their version numbers (C.F.:
|
|
116
|
-
# https://pypi.org/project/setuptools-scm/). As such, we'll get a stable fingerprint, but be
|
|
117
|
-
# forced to re-build a wheel each time the VCS requirement is re-locked later, even when it
|
|
118
|
-
# hashes the same.
|
|
119
|
-
vcs_control_dir = ".{vcs}".format(vcs=vcs)
|
|
120
|
-
|
|
121
174
|
hashing.dir_hash(
|
|
122
175
|
directory=os.path.join(repo_path, subdirectory) if subdirectory else repo_path,
|
|
123
176
|
digest=digest,
|
|
124
|
-
dir_filter=(
|
|
125
|
-
|
|
126
|
-
not is_pyc_dir(dir_path) and os.path.basename(dir_path) != vcs_control_dir
|
|
127
|
-
)
|
|
128
|
-
),
|
|
129
|
-
file_filter=lambda f: not is_pyc_file(f),
|
|
177
|
+
dir_filter=_vcs_dir_filter(vcs, project_name),
|
|
178
|
+
file_filter=_vcs_file_filter(vcs),
|
|
130
179
|
)
|
pex/pip/version.py
CHANGED
|
@@ -369,6 +369,13 @@ class PipVersion(Enum["PipVersionValue"]):
|
|
|
369
369
|
requires_python=">=3.9,<3.16",
|
|
370
370
|
)
|
|
371
371
|
|
|
372
|
+
v25_3 = PipVersionValue(
|
|
373
|
+
version="25.3",
|
|
374
|
+
setuptools_version="80.9.0",
|
|
375
|
+
wheel_version="0.45.1",
|
|
376
|
+
requires_python=">=3.9,<3.16",
|
|
377
|
+
)
|
|
378
|
+
|
|
372
379
|
VENDORED = v20_3_4_patched
|
|
373
380
|
LATEST = LatestPipVersion()
|
|
374
381
|
LATEST_COMPATIBLE = LatestCompatiblePipVersion()
|
pex/resolve/lock_downloader.py
CHANGED
|
@@ -154,6 +154,7 @@ class VCSArtifactDownloadManager(DownloadManager[VCSArtifact]):
|
|
|
154
154
|
local_distribution = downloaded_vcs.local_distributions[0]
|
|
155
155
|
filename = os.path.basename(local_distribution.path)
|
|
156
156
|
digest_vcs_archive(
|
|
157
|
+
project_name=project_name,
|
|
157
158
|
archive_path=local_distribution.path,
|
|
158
159
|
vcs=artifact.vcs,
|
|
159
160
|
digest=digest,
|
pex/resolve/locker.py
CHANGED
|
@@ -291,6 +291,16 @@ class Locker(LogAnalyzer):
|
|
|
291
291
|
def _maybe_record_wheel(self, url):
|
|
292
292
|
# type: (str) -> ArtifactURL
|
|
293
293
|
artifact_url = self.parse_url_and_maybe_record_fingerprint(url)
|
|
294
|
+
|
|
295
|
+
# N.B.: Lock resolves driven by `pip install --dry-run --report` will only consult PEP-658
|
|
296
|
+
# `.whl.metadata` side-car files in the happy path; so we must use these as a proxy for the
|
|
297
|
+
# `.whl` file they are paired with.
|
|
298
|
+
# See: https://peps.python.org/pep-0658/
|
|
299
|
+
if not self._lock_is_via_pip_download and artifact_url.url_info.path.endswith(".metadata"):
|
|
300
|
+
artifact_url = ArtifactURL.from_url_info(
|
|
301
|
+
artifact_url.url_info._replace(path=artifact_url.url_info.path[:-9])
|
|
302
|
+
)
|
|
303
|
+
|
|
294
304
|
if artifact_url.is_wheel:
|
|
295
305
|
pin, partial_artifact = self._extract_resolve_data(artifact_url)
|
|
296
306
|
|
|
@@ -371,8 +381,8 @@ class Locker(LogAnalyzer):
|
|
|
371
381
|
if isinstance(artifact_url.scheme, VCSScheme):
|
|
372
382
|
source_fingerprint, archive_path = fingerprint_downloaded_vcs_archive(
|
|
373
383
|
download_dir=self._download_dir,
|
|
374
|
-
project_name=
|
|
375
|
-
version=
|
|
384
|
+
project_name=build_result.pin.project_name,
|
|
385
|
+
version=build_result.pin.version,
|
|
376
386
|
vcs=artifact_url.scheme.vcs,
|
|
377
387
|
)
|
|
378
388
|
verified = True
|
|
@@ -445,6 +455,7 @@ class Locker(LogAnalyzer):
|
|
|
445
455
|
if isinstance(artifact_url.scheme, VCSScheme):
|
|
446
456
|
digest = Sha256()
|
|
447
457
|
digest_vcs_repo(
|
|
458
|
+
project_name=build_result.pin.project_name,
|
|
448
459
|
repo_path=build_result.path,
|
|
449
460
|
vcs=artifact_url.scheme.vcs,
|
|
450
461
|
digest=digest,
|
pex/scie/__init__.py
CHANGED
|
@@ -222,6 +222,32 @@ def register_options(parser):
|
|
|
222
222
|
"to the patch level."
|
|
223
223
|
),
|
|
224
224
|
)
|
|
225
|
+
parser.add_argument(
|
|
226
|
+
"--scie-pbs-free-threaded",
|
|
227
|
+
"--no-scie-pbs-free-threaded",
|
|
228
|
+
dest="scie_pbs_free_threaded",
|
|
229
|
+
default=False,
|
|
230
|
+
type=bool,
|
|
231
|
+
action=HandleBoolAction,
|
|
232
|
+
help=(
|
|
233
|
+
"Should the Python Standalone Builds CPython distributions be free-threaded. If left "
|
|
234
|
+
"unspecified or otherwise turned off, creating a scie from a PEX with free-threaded "
|
|
235
|
+
"abi wheels will automatically turn this option on. Note that this option is not "
|
|
236
|
+
"compatible with `--scie-pbs-stripped`."
|
|
237
|
+
),
|
|
238
|
+
)
|
|
239
|
+
parser.add_argument(
|
|
240
|
+
"--scie-pbs-debug",
|
|
241
|
+
"--no-scie-pbs-debug",
|
|
242
|
+
dest="scie_pbs_debug",
|
|
243
|
+
default=False,
|
|
244
|
+
type=bool,
|
|
245
|
+
action=HandleBoolAction,
|
|
246
|
+
help=(
|
|
247
|
+
"Should the Python Standalone Builds CPython distributions be debug builds. Note that "
|
|
248
|
+
"this option is not compatible with `--scie-pbs-stripped`."
|
|
249
|
+
),
|
|
250
|
+
)
|
|
225
251
|
parser.add_argument(
|
|
226
252
|
"--scie-pbs-stripped",
|
|
227
253
|
"--no-scie-pbs-stripped",
|
|
@@ -232,7 +258,8 @@ def register_options(parser):
|
|
|
232
258
|
help=(
|
|
233
259
|
"Should the Python Standalone Builds CPython distributions used be stripped of debug "
|
|
234
260
|
"symbols or not. For Linux and Windows particularly, the stripped distributions are "
|
|
235
|
-
"less than half the size of the distributions that ship with debug symbols."
|
|
261
|
+
"less than half the size of the distributions that ship with debug symbols. Note that"
|
|
262
|
+
"this option is not compatible with `--scie-pbs-free-threaded` or `--scie-pbs-debug`."
|
|
236
263
|
),
|
|
237
264
|
)
|
|
238
265
|
parser.add_argument(
|
|
@@ -318,6 +345,10 @@ def render_options(options):
|
|
|
318
345
|
if options.python_version:
|
|
319
346
|
args.append("--scie-python-version")
|
|
320
347
|
args.append(".".join(map(str, options.python_version)))
|
|
348
|
+
if options.pbs_free_threaded:
|
|
349
|
+
args.append("--scie-pbs-free-threaded")
|
|
350
|
+
if options.pbs_debug:
|
|
351
|
+
args.append("--scie-pbs-debug")
|
|
321
352
|
if options.pbs_stripped:
|
|
322
353
|
args.append("--scie-pbs-stripped")
|
|
323
354
|
for hash_algorithm in options.hash_algorithms:
|
|
@@ -398,6 +429,12 @@ def extract_options(options):
|
|
|
398
429
|
)
|
|
399
430
|
)
|
|
400
431
|
|
|
432
|
+
if options.scie_pbs_stripped and (options.scie_pbs_free_threaded or options.scie_pbs_debug):
|
|
433
|
+
raise ValueError(
|
|
434
|
+
"Python Standalone Builds does not release stripped distributions for debug or "
|
|
435
|
+
"free-threaded builds."
|
|
436
|
+
)
|
|
437
|
+
|
|
401
438
|
science_binary = None # type: Optional[Union[File, Url]]
|
|
402
439
|
if options.scie_science_binary:
|
|
403
440
|
url_info = urlparse.urlparse(options.scie_science_binary)
|
|
@@ -420,6 +457,8 @@ def extract_options(options):
|
|
|
420
457
|
pbs_release=options.scie_pbs_release,
|
|
421
458
|
pypy_release=options.scie_pypy_release,
|
|
422
459
|
python_version=python_version,
|
|
460
|
+
pbs_free_threaded=options.scie_pbs_free_threaded,
|
|
461
|
+
pbs_debug=options.scie_pbs_debug,
|
|
423
462
|
pbs_stripped=options.scie_pbs_stripped,
|
|
424
463
|
hash_algorithms=tuple(options.scie_hash_algorithms),
|
|
425
464
|
science_binary=science_binary,
|
pex/scie/model.py
CHANGED
|
@@ -303,6 +303,8 @@ class ScieOptions(object):
|
|
|
303
303
|
python_version = attr.ib(
|
|
304
304
|
default=None
|
|
305
305
|
) # type: Optional[Union[Tuple[int, int], Tuple[int, int, int]]]
|
|
306
|
+
pbs_free_threaded = attr.ib(default=False) # type: bool
|
|
307
|
+
pbs_debug = attr.ib(default=False) # type: bool
|
|
306
308
|
pbs_stripped = attr.ib(default=False) # type: bool
|
|
307
309
|
hash_algorithms = attr.ib(default=()) # type: Tuple[str, ...]
|
|
308
310
|
science_binary = attr.ib(default=None) # type: Optional[Union[File, Url]]
|
pex/scie/science.py
CHANGED
|
@@ -24,6 +24,7 @@ from pex.hashing import Sha256
|
|
|
24
24
|
from pex.os import is_exe
|
|
25
25
|
from pex.pep_440 import Version
|
|
26
26
|
from pex.pex import PEX
|
|
27
|
+
from pex.pex_info import PexInfo
|
|
27
28
|
from pex.result import Error, try_
|
|
28
29
|
from pex.scie.model import (
|
|
29
30
|
File,
|
|
@@ -37,6 +38,7 @@ from pex.scie.model import (
|
|
|
37
38
|
)
|
|
38
39
|
from pex.sysconfig import SysPlatform
|
|
39
40
|
from pex.third_party.packaging.specifiers import SpecifierSet
|
|
41
|
+
from pex.third_party.packaging.utils import parse_wheel_filename
|
|
40
42
|
from pex.third_party.packaging.version import InvalidVersion
|
|
41
43
|
from pex.tracer import TRACER
|
|
42
44
|
from pex.typing import TYPE_CHECKING
|
|
@@ -66,7 +68,7 @@ class Manifest(object):
|
|
|
66
68
|
|
|
67
69
|
|
|
68
70
|
SCIENCE_RELEASES_URL = "https://github.com/a-scie/lift/releases"
|
|
69
|
-
MIN_SCIENCE_VERSION = Version("0.
|
|
71
|
+
MIN_SCIENCE_VERSION = Version("0.15.0")
|
|
70
72
|
SCIENCE_REQUIREMENT = SpecifierSet("~={min_version}".format(min_version=MIN_SCIENCE_VERSION))
|
|
71
73
|
|
|
72
74
|
|
|
@@ -104,6 +106,16 @@ class Filenames(Enum["Filenames.Value"]):
|
|
|
104
106
|
Filenames.seal()
|
|
105
107
|
|
|
106
108
|
|
|
109
|
+
def _is_free_threaded_pex(pex_info):
|
|
110
|
+
# type: (PexInfo) -> bool
|
|
111
|
+
for distribution in pex_info.distributions:
|
|
112
|
+
_, _, _, tags = parse_wheel_filename(os.path.basename(distribution))
|
|
113
|
+
for tag in tags:
|
|
114
|
+
if tag.abi.startswith(("cp", "abi3")) and "t" in tag.abi:
|
|
115
|
+
return True
|
|
116
|
+
return False
|
|
117
|
+
|
|
118
|
+
|
|
107
119
|
def create_manifests(
|
|
108
120
|
configuration, # type: ScieConfiguration
|
|
109
121
|
name, # type: str
|
|
@@ -270,6 +282,7 @@ def create_manifests(
|
|
|
270
282
|
}
|
|
271
283
|
|
|
272
284
|
configure_binding_args = [Filenames.PEX.placeholder, Filenames.CONFIGURE_BINDING.placeholder]
|
|
285
|
+
pbs_free_threaded = _is_free_threaded_pex(pex_info) or configuration.options.pbs_free_threaded
|
|
273
286
|
for interpreter in configuration.interpreters:
|
|
274
287
|
lift = lift_template.copy()
|
|
275
288
|
|
|
@@ -285,10 +298,17 @@ def create_manifests(
|
|
|
285
298
|
interpreter.platform.qualified_file_name("{name}-lift.toml".format(name=name)),
|
|
286
299
|
)
|
|
287
300
|
|
|
301
|
+
version_str = interpreter.version_str
|
|
302
|
+
if Provider.PythonBuildStandalone is interpreter.provider:
|
|
303
|
+
if configuration.options.pbs_debug:
|
|
304
|
+
version_str += "d"
|
|
305
|
+
if pbs_free_threaded:
|
|
306
|
+
version_str += "t"
|
|
307
|
+
|
|
288
308
|
interpreter_config = {
|
|
289
309
|
"id": "python-distribution",
|
|
290
310
|
"provider": interpreter.provider.value,
|
|
291
|
-
"version":
|
|
311
|
+
"version": version_str,
|
|
292
312
|
"lazy": configuration.options.style is ScieStyle.LAZY,
|
|
293
313
|
}
|
|
294
314
|
if interpreter.release:
|
|
@@ -297,7 +317,9 @@ def create_manifests(
|
|
|
297
317
|
interpreter_config["base_url"] = "/".join(
|
|
298
318
|
(configuration.options.assets_base_url, "providers", str(interpreter.provider))
|
|
299
319
|
)
|
|
300
|
-
if Provider.PythonBuildStandalone is interpreter.provider
|
|
320
|
+
if Provider.PythonBuildStandalone is interpreter.provider and not (
|
|
321
|
+
configuration.options.pbs_debug or pbs_free_threaded
|
|
322
|
+
):
|
|
301
323
|
interpreter_config.update(
|
|
302
324
|
flavor=(
|
|
303
325
|
"install_only_stripped"
|
pex/version.py
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pex
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.66.0
|
|
4
4
|
Summary: The PEX packaging toolchain.
|
|
5
5
|
Home-page: https://github.com/pex-tool/pex
|
|
6
|
-
Download-URL: https://github.com/pex-tool/pex/releases/download/v2.
|
|
6
|
+
Download-URL: https://github.com/pex-tool/pex/releases/download/v2.66.0/pex
|
|
7
7
|
Author: The PEX developers
|
|
8
8
|
Author-email: developers@pex-tool.org
|
|
9
9
|
License-Expression: Apache-2.0
|
|
10
|
-
Project-URL: Changelog, https://github.com/pex-tool/pex/blob/v2.
|
|
10
|
+
Project-URL: Changelog, https://github.com/pex-tool/pex/blob/v2.66.0/CHANGES.md
|
|
11
11
|
Project-URL: Documentation, https://docs.pex-tool.org/
|
|
12
|
-
Project-URL: Source, https://github.com/pex-tool/pex/tree/v2.
|
|
12
|
+
Project-URL: Source, https://github.com/pex-tool/pex/tree/v2.66.0
|
|
13
13
|
Keywords: package,executable,virtualenv,lock,freeze
|
|
14
14
|
Classifier: Development Status :: 5 - Production/Stable
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
@@ -24,7 +24,7 @@ pex/fetcher.py,sha256=k6wIRU3aX478ExoNdRVd7miC_D-Ftw8s6WUHw50MKvY,14408
|
|
|
24
24
|
pex/finders.py,sha256=hmsrBoKmejx1ABPeCHhAtFk0lXhGV3WYGjhrjFufTKY,5109
|
|
25
25
|
pex/fingerprinted_distribution.py,sha256=0NB-Q-lOZV1QLfyrTDUN8KeezNgDGODFOLuolAAWJFM,752
|
|
26
26
|
pex/globals.py,sha256=9LnuOG1hu4azLd_auaUw2g_zS5m1KumEds7hh9lmdis,231
|
|
27
|
-
pex/hashing.py,sha256=
|
|
27
|
+
pex/hashing.py,sha256=BOXMbmU9Abbwzx2pMzyN2rP8muVe4HV8MeCbTLSEOiQ,10536
|
|
28
28
|
pex/hashing.py.lck,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
29
|
pex/inherit_path.py,sha256=NyEC7OxIQp3lwtZJAU3DxEGtJHM9GcKDkaaUmqZrJTU,1004
|
|
30
30
|
pex/installed_wheel.py,sha256=zPBq4AuXh4TsrtNU86bs1s3zc44YHckJp94y9oHZ_GE,5270
|
|
@@ -47,7 +47,7 @@ pex/pep_723.py,sha256=1mvpMxYRf6Sxte0aI_aAkStdYPSov0rF_NVCMjY1YJs,11740
|
|
|
47
47
|
pex/pex.py,sha256=lBa8xgf77FbUzBRViannbtw8wnCajIOWOw9k961x6HE,33955
|
|
48
48
|
pex/pex_boot.py,sha256=GKxNP3c9ntoBP7r78ms38RKhEugdOkVKWlIA8K9_bDk,8187
|
|
49
49
|
pex/pex_bootstrapper.py,sha256=8a8Tk0JAcek-XeoejyZZwQUuT4FYrwrmVEYuoYBWAxY,32002
|
|
50
|
-
pex/pex_builder.py,sha256=
|
|
50
|
+
pex/pex_builder.py,sha256=itEEY5BukJAvcTrxHM7oo3Fo8r_xmr7ehYLQp1RAVSw,34065
|
|
51
51
|
pex/pex_info.py,sha256=YQjwZu1uPnCpCVO8oXHvKO-Aa_Rqz_NokelZR2tVe2A,22588
|
|
52
52
|
pex/pex_root.py,sha256=wk5C_mmgRej_vHpSn1lDVehM5yEq3E6tY2s2ZkgoB1Y,2196
|
|
53
53
|
pex/pex_warnings.py,sha256=lxPhCx_3mdUcrGBuH6f-K49mZ10IDrNOrpvpbC1NFTA,1113
|
|
@@ -69,7 +69,7 @@ pex/tracer.py,sha256=nob_hNooCYWZev7_ABhAVyO4HBZ8Q_OajQUvNnr82Rc,4481
|
|
|
69
69
|
pex/typing.py,sha256=J1JTB1V48zIWmhWRHEMDHWMaFPMzsEonWJ9s57Ev43Q,3050
|
|
70
70
|
pex/util.py,sha256=TxTxpdDmrDTLVXt9e2XuRq9c3N6jRYNCce87QBFkCVo,5491
|
|
71
71
|
pex/variables.py,sha256=h3-JeMzXfRzEsWqTYsoU-6vt5W4Kr0VvbfSDAYtuZOU,34728
|
|
72
|
-
pex/version.py,sha256=
|
|
72
|
+
pex/version.py,sha256=JU9e5XKAuFUgDTFOC8wwIQkE3nkk3WfWepG33HUlCdE,131
|
|
73
73
|
pex/wheel.py,sha256=R9jPWwzla_c3xUbeYjaQMrKC0ly8UexKMLfuRDhP054,11146
|
|
74
74
|
pex/whl.py,sha256=0Nh1d6kmAaRANCygoVZZi0zii6j_elRQc7N6yDHTuMY,2513
|
|
75
75
|
pex/ziputils.py,sha256=thUrto9vEdG9mFCIJ59Js3d1y6bSfFdl7pb1lSb7KAQ,9620
|
|
@@ -113,33 +113,33 @@ pex/distutils/commands/__init__.py,sha256=uASB5OU996Jax-h3kMmeZjG5Jdy9BYDR6A1swk
|
|
|
113
113
|
pex/distutils/commands/bdist_pex.py,sha256=SLwBj0ALpArhKQT94X0niKWfyLaySjOZuZrGXG332K0,5117
|
|
114
114
|
pex/docs/__init__.py,sha256=u9hPOij1fpo1yPBLTQTdSCnSIUuRCSXHomCkEAaCciA,439
|
|
115
115
|
pex/docs/command.py,sha256=uQyD8bO_DBNIlkPd6F7SFZbZUVh1Xn6gT8OmVxP4qxk,3046
|
|
116
|
-
pex/docs/html/buildingpex.html,sha256=
|
|
117
|
-
pex/docs/html/genindex.html,sha256=
|
|
118
|
-
pex/docs/html/index.html,sha256=
|
|
119
|
-
pex/docs/html/recipes.html,sha256=
|
|
120
|
-
pex/docs/html/scie.html,sha256=
|
|
121
|
-
pex/docs/html/search.html,sha256=
|
|
116
|
+
pex/docs/html/buildingpex.html,sha256=ynKT2arr5JmjBoz9tpAG3DjP4DvC2Q1jaReHr7Lq8bs,57407
|
|
117
|
+
pex/docs/html/genindex.html,sha256=knmLTMNEboqxQ4ifvtYUfk6WMVYFAOQDoRucHxwaZCM,17198
|
|
118
|
+
pex/docs/html/index.html,sha256=DFrqPPomteY78CfoTAm0cUopDhP1uN4DAGi601ydlc8,25028
|
|
119
|
+
pex/docs/html/recipes.html,sha256=SsDMMEgltfwb-O3u0bA7F84G3RtAhf95_ffFsWAbJHc,35192
|
|
120
|
+
pex/docs/html/scie.html,sha256=qQaFpVJF1pta8e7kqruDIyarJL4u16rS0xfeW3dKga0,62182
|
|
121
|
+
pex/docs/html/search.html,sha256=Zakl6pGBNidDqcyyG_waBFL3t45cilvBD6DDerU8uvo,18169
|
|
122
122
|
pex/docs/html/searchindex.js,sha256=R_L6Oveik_wlK5CmaE7YwRvmu81r6fd7jtnZUjfk1sA,18009
|
|
123
|
-
pex/docs/html/whatispex.html,sha256=
|
|
124
|
-
pex/docs/html/_pagefind/pagefind-entry.json,sha256=
|
|
123
|
+
pex/docs/html/whatispex.html,sha256=FrCSfUwAjfEJa77DGOSGFY51zemyhpmzpNkKySsm9mk,22754
|
|
124
|
+
pex/docs/html/_pagefind/pagefind-entry.json,sha256=F8iqak_nhKOhkNuiy2Wbs3q-BtsZPwjxczv0O4QdDew,90
|
|
125
125
|
pex/docs/html/_pagefind/pagefind-highlight.js,sha256=5hRyi7gOMY9tlTe-tbmDrVJpoxbnYxhbJeoGwtmCfXA,43944
|
|
126
126
|
pex/docs/html/_pagefind/pagefind-modular-ui.css,sha256=ZTqynk3lYp9t319vzfXSs-tTmowH__ila4ziFWpXB4g,7336
|
|
127
127
|
pex/docs/html/_pagefind/pagefind-modular-ui.js,sha256=-DCEOJ2cInrvjEGZFxCuYy81EMWbKHhMu4wivlJmUzE,14486
|
|
128
128
|
pex/docs/html/_pagefind/pagefind-ui.css,sha256=GL61nVezuyVA4ynNRJejhEwUBxhBtx4rDYVlAgI_W1U,14486
|
|
129
129
|
pex/docs/html/_pagefind/pagefind-ui.js,sha256=WQ3yec_CMkBKswl16Ig5N_zJzeCgL4z9y344TcJeKAQ,78367
|
|
130
|
-
pex/docs/html/_pagefind/pagefind.
|
|
130
|
+
pex/docs/html/_pagefind/pagefind.en_4eb6e6f279.pf_meta,sha256=1VVd-JmIXnfYh57fSq84iZbVhGrBEX06WmyR4t13klE,152
|
|
131
131
|
pex/docs/html/_pagefind/pagefind.js,sha256=Q-4jKyPif6awDU9x8IoWXTWoJJR1JZicegUYQ-QI4MA,32912
|
|
132
132
|
pex/docs/html/_pagefind/wasm.en.pagefind,sha256=mG0TKIE7WXynsyg-tpiMZiVG2Hwebbt2UqFqlqdTTsE,70873
|
|
133
133
|
pex/docs/html/_pagefind/wasm.unknown.pagefind,sha256=eAREknqQnc_y96pbl8eYz9zqfUXsqe64B7HwrQE2SkY,67202
|
|
134
|
-
pex/docs/html/_pagefind/fragment/
|
|
135
|
-
pex/docs/html/_pagefind/fragment/
|
|
136
|
-
pex/docs/html/_pagefind/fragment/
|
|
137
|
-
pex/docs/html/_pagefind/fragment/
|
|
138
|
-
pex/docs/html/_pagefind/fragment/
|
|
139
|
-
pex/docs/html/_pagefind/fragment/
|
|
140
|
-
pex/docs/html/_pagefind/fragment/
|
|
141
|
-
pex/docs/html/_pagefind/fragment/
|
|
142
|
-
pex/docs/html/_pagefind/index/
|
|
134
|
+
pex/docs/html/_pagefind/fragment/en_1caf19d.pf_fragment,sha256=fSUo8MMVcVWZ-o2Zk-WumtLxdJqBRuaDteLolIJvOJ0,369
|
|
135
|
+
pex/docs/html/_pagefind/fragment/en_2268ed8.pf_fragment,sha256=YtJbzbFGdbhvo77454kPY1lQ6VfK4duqbkC6ypxwawg,360
|
|
136
|
+
pex/docs/html/_pagefind/fragment/en_469c87d.pf_fragment,sha256=hVU52bY_Wn4jsZ_JyleodEz9pbURgB5pjsCzgyP_lBk,6821
|
|
137
|
+
pex/docs/html/_pagefind/fragment/en_4a75d8d.pf_fragment,sha256=MFbLe4zEElh2as446BJIajIWu_uBGIAszH2K5Zc52ls,1142
|
|
138
|
+
pex/docs/html/_pagefind/fragment/en_9fe4bcc.pf_fragment,sha256=621SOh9cnT-GQ9G7EkSCSVR5gzaHikAjuoQQml7N09I,4847
|
|
139
|
+
pex/docs/html/_pagefind/fragment/en_a951443.pf_fragment,sha256=h9w-CBjEKfBM7Pba-FQOIoPTRAUChwZnpptDKRBLmWM,3648
|
|
140
|
+
pex/docs/html/_pagefind/fragment/en_af1fb65.pf_fragment,sha256=fuHpeP6UrFdWvGiiEAIpmC6jILqnSYi4Xn-lvDIR1nc,3019
|
|
141
|
+
pex/docs/html/_pagefind/fragment/en_e0b014e.pf_fragment,sha256=UffRSQkll4itGiHWv7XT1TtgPunYyHZ5cikcI8ZmhC8,1158
|
|
142
|
+
pex/docs/html/_pagefind/index/en_f48c2e4.pf_index,sha256=PuVRMvbbtGNc11HWsHRIIL1jxvYIX5OuhfBX__Teero,28865
|
|
143
143
|
pex/docs/html/_sources/buildingpex.rst.txt,sha256=87P3ZO871MILL9pmpDM8_M7_YV1z5HjTYa9m8yuxTa4,19138
|
|
144
144
|
pex/docs/html/_sources/index.rst.txt,sha256=vWt1s6dirYeR-9mFJY1SClwWvbWqIqJSFCAF1CdZojc,1468
|
|
145
145
|
pex/docs/html/_sources/recipes.rst.txt,sha256=kerzvp8_t5io6eGl3YJODtNBQy7GmY2AA6RHaij9C-g,6958
|
|
@@ -149,7 +149,7 @@ pex/docs/html/_sources/api/vars.md.txt,sha256=C9gu5czyB-g788xRfYKF8P176ew_q97X6z
|
|
|
149
149
|
pex/docs/html/_static/basic.css,sha256=ZW_xus1vJg_H1xuX-cLx_L9pLchL9GnNlSA078ue7-0,14685
|
|
150
150
|
pex/docs/html/_static/debug.css,sha256=DQXNnnnVMjQwRmfAjwKXHeYZbA_8pZPDkDs2Z7QFWtY,1266
|
|
151
151
|
pex/docs/html/_static/doctools.js,sha256=KZLAnfkYJqjTPjtItkXud-RXrc98cS13aoFOHixEi0M,4322
|
|
152
|
-
pex/docs/html/_static/documentation_options.js,sha256=
|
|
152
|
+
pex/docs/html/_static/documentation_options.js,sha256=h06qvaWKMbza0MvL3bJy0mDYox8uD1YNy1ZSGd_R1h0,329
|
|
153
153
|
pex/docs/html/_static/file.png,sha256=XEvJoWrr84xLlQ9ZuOUByjZJUyjLnrYiIYvOkGSjXj4,286
|
|
154
154
|
pex/docs/html/_static/language_data.js,sha256=O8MRVjt_xegPyrL4Ypd0vzy2swICAA3zbf-OaVqQI7c,4598
|
|
155
155
|
pex/docs/html/_static/minus.png,sha256=R-f8UNs2mfHKQc6aL_ogLADF0dUYDFX2K6hZsb1swAg,90
|
|
@@ -169,7 +169,7 @@ pex/docs/html/_static/styles/furo-extensions.css,sha256=PSsCB3EaBzE9-2yLJyKV9fkx
|
|
|
169
169
|
pex/docs/html/_static/styles/furo-extensions.css.map,sha256=CzW267gfKqH8ruMlwJbWg-MsGAipIgZwoaP4gwDGkVw,7762
|
|
170
170
|
pex/docs/html/_static/styles/furo.css,sha256=666beINeSQtLZbSeNCMj62G7a13xiX1YwJVvij3jr-8,50749
|
|
171
171
|
pex/docs/html/_static/styles/furo.css.map,sha256=0k0kb9TwrJYQRT-2cbjTcOz7PQykGWHdy2BSuVMtrnY,76038
|
|
172
|
-
pex/docs/html/api/vars.html,sha256=
|
|
172
|
+
pex/docs/html/api/vars.html,sha256=hahWmNkn7TZ5lzO-RmaBENG6sxqBqJi3TAK3SiqXjNs,34903
|
|
173
173
|
pex/fs/__init__.py,sha256=ues2bnsufy1lYRyoWsiP-G4kuPrV-tXaZ0x-HFJFpwY,3605
|
|
174
174
|
pex/fs/_posix.py,sha256=p-VkjEfRNXduBmkxcuEXWM1g6y6xrkufSYzEy93tqjA,1275
|
|
175
175
|
pex/fs/_windows.py,sha256=apacgHpxNutF5HkU6cYOLHq7yqaijRMsFBdsdKSviDo,3304
|
|
@@ -182,9 +182,9 @@ pex/pip/installation.py,sha256=CFykX2FEPygqO0jxMzPG-rvd2Eos8YJ2cviyMsOUayU,21301
|
|
|
182
182
|
pex/pip/local_project.py,sha256=0HsnUgb0d1XX1TokVogF1xV-pTFNuBLDG-7K2j5VUVI,2040
|
|
183
183
|
pex/pip/log_analyzer.py,sha256=YLecIWrjTBvDZA_OwvQlcR1gf6-rI_eBt_LFZTA2E-U,4362
|
|
184
184
|
pex/pip/tailer.py,sha256=af7yJ1rxvtTltno1BEVgJ6lf1C0PPnCzCs6CWto7Y9s,4445
|
|
185
|
-
pex/pip/tool.py,sha256
|
|
186
|
-
pex/pip/vcs.py,sha256=
|
|
187
|
-
pex/pip/version.py,sha256=
|
|
185
|
+
pex/pip/tool.py,sha256=CC9pN5b9cB9Poxt4aptsrOP19rx29dlZZotKHPwP8cY,37996
|
|
186
|
+
pex/pip/vcs.py,sha256=6CE2TBgaeuZ8pVS8qDsA_Dkx_MRNBnExREuCxohwQpM,6259
|
|
187
|
+
pex/pip/version.py,sha256=5CgNwIwrXVLMqoLOTV-gIMH1KLuQ8ELnfBWFM8_f00k,12812
|
|
188
188
|
pex/pip/dependencies/__init__.py,sha256=Hwrin59pqb2QPU4ysCPUhqzfsE1PHx56a-ED39eEV0Q,5126
|
|
189
189
|
pex/pip/dependencies/requires.py,sha256=OHEsklGHs05Ew5E-hb9q_lQ7ijHByNN_YRTlvy-iuiU,5419
|
|
190
190
|
pex/pip/foreign_platform/__init__.py,sha256=MQ9I_K_rkL_nKGHG2GcwVfgrJ20vC2Rff8wPeVZchNM,7924
|
|
@@ -202,10 +202,10 @@ pex/resolve/config.py,sha256=2urR5rvh6pY8tZzUfRdUVGYrAY1iXURp_N4lrnXIdJA,3362
|
|
|
202
202
|
pex/resolve/configured_resolve.py,sha256=jd-lVJjXXtNlEbTlfaRpprETcDAywrpmm2Hpu0-T9ns,9617
|
|
203
203
|
pex/resolve/configured_resolver.py,sha256=MRzp1hVHl7ooKHEhESN7oxMd5fOpxuXOGYiUXZe0Yww,3457
|
|
204
204
|
pex/resolve/downloads.py,sha256=8R4GI-PSSLw2qv6XKsGyDFEiugfJgw2G6F4lywtU_Xk,7074
|
|
205
|
-
pex/resolve/lock_downloader.py,sha256=
|
|
205
|
+
pex/resolve/lock_downloader.py,sha256=wFWWPg1IWwLCAHN43ci28nqCrodmZM8mmKtMRW45O4M,15386
|
|
206
206
|
pex/resolve/lock_resolver.py,sha256=b6UoqaXPNdWEt1JC8S6HSc4el5ows6kmIa5T87OsAm0,23398
|
|
207
207
|
pex/resolve/locked_resolve.py,sha256=h47WC84zHgE1H3kf9OahfSa_df0fEfxtIWeLX7stK50,40672
|
|
208
|
-
pex/resolve/locker.py,sha256=
|
|
208
|
+
pex/resolve/locker.py,sha256=PdTsNF66GJmCRilk_POEGZ7eZP3aoTg6UNPIDfUlpmY,30421
|
|
209
209
|
pex/resolve/locker_patches.py,sha256=KttN07cCok3ajNm5TLzsZhBTPmPDyO33WkDbE4G9TB4,8043
|
|
210
210
|
pex/resolve/package_repository.py,sha256=xMU9aTxojS2sNmWp03jfMBTIGhq3eqNuNOacl8BiiGY,15123
|
|
211
211
|
pex/resolve/path_mappings.py,sha256=d6JVzD0K342ELz3O8AcsaXoikLDF3xYrgbXkixMmf3Q,2073
|
|
@@ -238,10 +238,10 @@ pex/resolve/pep_691/__init__.py,sha256=hbVu8HKJGOAmXQlIyMjcEt0EsBK311HumeAwENvHH
|
|
|
238
238
|
pex/resolve/pep_691/api.py,sha256=Qjvl6ESniISty6nGiqtXsEX8kR-WGDU2FZzrnsfNq0w,8934
|
|
239
239
|
pex/resolve/pep_691/fingerprint_service.py,sha256=Z7m2efzkETbHxXpn6IjDHjRBr_p2r48txeM1wVwStB8,10387
|
|
240
240
|
pex/resolve/pep_691/model.py,sha256=lpuDh3ACKHVeKih1lqvn2Ka27VDq27UjfSA0WUU-_oE,2786
|
|
241
|
-
pex/scie/__init__.py,sha256=
|
|
241
|
+
pex/scie/__init__.py,sha256=FdKXjeDNSBtXihM96r4hj_pY3_p1ML8rbGg1WiLbGrc,21315
|
|
242
242
|
pex/scie/configure-binding.py,sha256=BksrnIFh_7ahhnxa1W7_ADAPKysAjRzQN3fb7FXbNVU,2343
|
|
243
|
-
pex/scie/model.py,sha256=
|
|
244
|
-
pex/scie/science.py,sha256=
|
|
243
|
+
pex/scie/model.py,sha256=1hcnGjTj55ag8dhVm4PWA1YviK4fWwsV66jnJj2MDys,18415
|
|
244
|
+
pex/scie/science.py,sha256=vk7ODau6q_rpdMDjqbEM3DdK0KPzbV7S3yffnnFR1tA,23531
|
|
245
245
|
pex/third_party/__init__.py,sha256=TRc8RDAuGkCMpLnXpOni3Eyh4B3jRiVCc-3QI71nok4,27035
|
|
246
246
|
pex/tools/__init__.py,sha256=wR8_WpMqU00v6LNoLw_WGvCftUnnQ7QdENFpOFjRoio,107
|
|
247
247
|
pex/tools/__main__.py,sha256=vBHTFs1w9ZIShIL9j85q-CQz6G0NYSHRgui7bA0PeAk,220
|
|
@@ -985,10 +985,10 @@ pex/windows/stubs/uv-trampoline-aarch64-console.exe,sha256=1S2aM-6CV7rKz-3ncM5X7
|
|
|
985
985
|
pex/windows/stubs/uv-trampoline-aarch64-gui.exe,sha256=mb8x1FpyH-wy11X5YgWfqh_VUwBb62M4Zf9aFr5V4EE,40448
|
|
986
986
|
pex/windows/stubs/uv-trampoline-x86_64-console.exe,sha256=nLopBrlCMMFjkKVRlY7Ke2zFGpQOyF5mSlLs0d7-HRQ,40960
|
|
987
987
|
pex/windows/stubs/uv-trampoline-x86_64-gui.exe,sha256=icnp1oXrOZpc-dHTGvDbTHjr-D8M0eamvRrC9bPI_KI,41984
|
|
988
|
-
pex-2.
|
|
989
|
-
pex-2.
|
|
990
|
-
pex-2.
|
|
991
|
-
pex-2.
|
|
992
|
-
pex-2.
|
|
993
|
-
pex-2.
|
|
994
|
-
pex-2.
|
|
988
|
+
pex-2.66.0.dist-info/METADATA,sha256=DDpyoO3f02WzA8ozzhI-_mHe2XPV-_PzJz2h0imap8w,7476
|
|
989
|
+
pex-2.66.0.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
|
|
990
|
+
pex-2.66.0.dist-info/entry_points.txt,sha256=LD9tcxNxdsVLeIF6zR7dyH1vgo2eD9a-05TC1UraGMQ,174
|
|
991
|
+
pex-2.66.0.dist-info/top_level.txt,sha256=HlafJUPu7mfjxv3SDH-RbkxsHOWSVbPXTEBC1hzonpM,4
|
|
992
|
+
pex-2.66.0.dist-info/licenses/LICENSE,sha256=bcDgaNzzpbyOBUIFuFt3IOHUkmW7xkv1FdLPeRl99po,11323
|
|
993
|
+
pex-2.66.0.dist-info/pylock/pylock.toml,sha256=9TIk5X6BqnJ6lKu8eb0EnzwbBcOjs3QJWzcLMYx8M5k,7151
|
|
994
|
+
pex-2.66.0.dist-info/RECORD,,
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|