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.

Files changed (47) hide show
  1. pex/docs/html/_pagefind/fragment/en_1caf19d.pf_fragment +0 -0
  2. pex/docs/html/_pagefind/fragment/en_2268ed8.pf_fragment +0 -0
  3. pex/docs/html/_pagefind/fragment/en_469c87d.pf_fragment +0 -0
  4. pex/docs/html/_pagefind/fragment/en_4a75d8d.pf_fragment +0 -0
  5. pex/docs/html/_pagefind/fragment/en_9fe4bcc.pf_fragment +0 -0
  6. pex/docs/html/_pagefind/fragment/en_a951443.pf_fragment +0 -0
  7. pex/docs/html/_pagefind/fragment/en_af1fb65.pf_fragment +0 -0
  8. pex/docs/html/_pagefind/fragment/en_e0b014e.pf_fragment +0 -0
  9. pex/docs/html/_pagefind/index/{en_17effb2.pf_index → en_f48c2e4.pf_index} +0 -0
  10. pex/docs/html/_pagefind/pagefind-entry.json +1 -1
  11. pex/docs/html/_pagefind/pagefind.en_4eb6e6f279.pf_meta +0 -0
  12. pex/docs/html/_static/documentation_options.js +1 -1
  13. pex/docs/html/api/vars.html +5 -5
  14. pex/docs/html/buildingpex.html +5 -5
  15. pex/docs/html/genindex.html +5 -5
  16. pex/docs/html/index.html +5 -5
  17. pex/docs/html/recipes.html +5 -5
  18. pex/docs/html/scie.html +5 -5
  19. pex/docs/html/search.html +5 -5
  20. pex/docs/html/whatispex.html +5 -5
  21. pex/hashing.py +71 -9
  22. pex/pex_builder.py +1 -4
  23. pex/pip/tool.py +3 -3
  24. pex/pip/vcs.py +93 -44
  25. pex/pip/version.py +7 -0
  26. pex/resolve/lock_downloader.py +1 -0
  27. pex/resolve/locker.py +13 -2
  28. pex/scie/__init__.py +40 -1
  29. pex/scie/model.py +2 -0
  30. pex/scie/science.py +25 -3
  31. pex/version.py +1 -1
  32. {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/METADATA +4 -4
  33. {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/RECORD +38 -38
  34. pex/docs/html/_pagefind/fragment/en_1048255.pf_fragment +0 -0
  35. pex/docs/html/_pagefind/fragment/en_17782b6.pf_fragment +0 -0
  36. pex/docs/html/_pagefind/fragment/en_3f7efc3.pf_fragment +0 -0
  37. pex/docs/html/_pagefind/fragment/en_40667cd.pf_fragment +0 -0
  38. pex/docs/html/_pagefind/fragment/en_55ee2f4.pf_fragment +0 -0
  39. pex/docs/html/_pagefind/fragment/en_d6d92dd.pf_fragment +0 -0
  40. pex/docs/html/_pagefind/fragment/en_d834316.pf_fragment +0 -0
  41. pex/docs/html/_pagefind/fragment/en_ec2ce54.pf_fragment +0 -0
  42. pex/docs/html/_pagefind/pagefind.en_49ec86cf86.pf_meta +0 -0
  43. {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/WHEEL +0 -0
  44. {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/entry_points.txt +0 -0
  45. {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/licenses/LICENSE +0 -0
  46. {pex-2.64.1.dist-info → pex-2.66.0.dist-info}/pylock/pylock.toml +0 -0
  47. {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, open_zip, temporary_dir
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
- from typing import Optional, Tuple, Union
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 = re.compile(
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: str
62
- version, # type: str
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
- # The zip archives created by Pip have a single project name top-level directory housing
94
- # the full clone. We look for that to get a consistent clone hash with a bare clone.
95
- listing = glob.glob(os.path.join(chroot, "*"))
96
- if len(listing) == 1 and os.path.isdir(listing[0]):
97
- chroot = listing[0]
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
- digest_vcs_repo(repo_path=chroot, vcs=vcs, digest=digest)
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
- lambda dir_path: (
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()
@@ -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=str(build_result.pin.project_name),
375
- version=str(build_result.pin.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.14.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": interpreter.version_str,
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,4 +1,4 @@
1
1
  # Copyright 2015 Pex project contributors.
2
2
  # Licensed under the Apache License, Version 2.0 (see LICENSE).
3
3
 
4
- __version__ = "2.64.1"
4
+ __version__ = "2.66.0"
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pex
3
- Version: 2.64.1
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.64.1/pex
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.64.1/CHANGES.md
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.64.1
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=ZFKHJva_XPYz3nYQkjKLob5-WprAHeA6WtAGwfwXkQk,8585
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=6PW1yhd7iON8lU0_IMXNAO-R6_6k1VW8ol2K_j6yI0Y,34153
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=BLKam827lVgMbCYgJQ5UpK6_rymN_y83LwCV0LLaeUQ,131
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=AkyITTvAGKKwT9_juLFszM8HQppMDJRROybHG47uAug,57407
117
- pex/docs/html/genindex.html,sha256=CAO3UOeeb7B1oqgfjIU6VvVsxr8JqGeAbAfF4l0kg9k,17198
118
- pex/docs/html/index.html,sha256=iA5fIs2ELwsYR25ruMUj24Od96GSZSlJBLCC18Vo_ok,25028
119
- pex/docs/html/recipes.html,sha256=5u6ZiSsfXvbgQA5XEZ8V8wUAbdgZhBUZsyLs-nkirlA,35192
120
- pex/docs/html/scie.html,sha256=sOOAr9_qR74koHAmA0Vqz2c5YL0EY6-zOd_6uDolpVw,62182
121
- pex/docs/html/search.html,sha256=8ixFXJbHEFITLOpvUe6UjtwE_vDIF61tVONigyO_p30,18169
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=j2GOCgmYWJ1CHeMmI4Qy_x0xjG4Nk1VsQsqxgwEjspo,22754
124
- pex/docs/html/_pagefind/pagefind-entry.json,sha256=1J70ySITvCU8pTBq1h0mJCU-3wwzs7smdlGPSQ_Lgv8,90
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.en_49ec86cf86.pf_meta,sha256=AZ5hh62ZSsWPfu3YudrFL-h3WBeglzd_EXXWVQZJM4g,153
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/en_1048255.pf_fragment,sha256=G_6n0_AJSD7D9eUK9UIGamNw-thyRZwzCYNVd-TRSuw,4847
135
- pex/docs/html/_pagefind/fragment/en_17782b6.pf_fragment,sha256=gZJCc1crXHPewyMvhbFKcbYzD5cTs2kNiX_uQxks_cs,1142
136
- pex/docs/html/_pagefind/fragment/en_3f7efc3.pf_fragment,sha256=MeZz7_jHfqcHAcY6V4iLYEgBxAu_c8G9AUtYH0ewQ8U,3648
137
- pex/docs/html/_pagefind/fragment/en_40667cd.pf_fragment,sha256=lv0NmR9usJNVyYgCs-CUSK6zqB8SsyrqeK6rzpmz0RY,1158
138
- pex/docs/html/_pagefind/fragment/en_55ee2f4.pf_fragment,sha256=u3G4hHjV36-WhkamxqU_H_DPvqapQdyCbfzKs-u_rU8,3018
139
- pex/docs/html/_pagefind/fragment/en_d6d92dd.pf_fragment,sha256=zkeQncWdnUDerJ1F-3_KQnltl2Sn3DGiKiC66es7mVI,369
140
- pex/docs/html/_pagefind/fragment/en_d834316.pf_fragment,sha256=Sgl_E6YdBCQLuBFZXKk2gGYngzS92gbeTu8psCm2h9E,6821
141
- pex/docs/html/_pagefind/fragment/en_ec2ce54.pf_fragment,sha256=IajTxAwJ-FjFaQWtLi0COloLwr8wqwYtLGm27ViTH80,360
142
- pex/docs/html/_pagefind/index/en_17effb2.pf_index,sha256=LD1dIFlS8Nsd9jPzVA8SrGa00VzIDap9iqX4n1WZ9qA,28865
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=kGEbLnoEe9uot1NuLpByPqNQ9DUCEC5CHgFN3HIcoZI,329
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=LOdcpy2Lk75rKLOUURUkNjoz3ROtdJ0CsZEulfyKqZ8,34903
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=-D0YanfpDn1ftHFE5fqgUIFO16Wn0rzfB5vQKN3WDCg,37897
186
- pex/pip/vcs.py,sha256=6Kd_luDU3yfpqMYYQdlmskZpuldssrWGlsl1Tj7fdqE,4520
187
- pex/pip/version.py,sha256=oXScGU_Z18c-uzAr67f0U3NsxDXFEQ_FK-0Bnbn8YXs,12644
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=RbG7bdwxx-k7U1k_Kpipb4Po3bdPhk6Rv5gt7yZrAVw,15347
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=f0T9R97w8F0-GPSoXAG6YmgKs_wTjue4iPRk8WAjTcw,29816
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=_Dq9T5bgajm_fpS8Q-E0lUOC8M6sIDKOjixQ-pGfJ5w,19710
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=tJUSnhGXY4ZJ4by69H4y8iA7iaoSVZl5Zdfc-i2zC2c,18301
244
- pex/scie/science.py,sha256=dSo8unqyF-C5RJx3bWQIiXpJwiIhSQ9Be-2JS35-lIk,22661
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.64.1.dist-info/METADATA,sha256=LlwMQPUAq3_YriAYDZI0W6_2z4dKZ7RKCV1Zjec0qG0,7476
989
- pex-2.64.1.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
990
- pex-2.64.1.dist-info/entry_points.txt,sha256=LD9tcxNxdsVLeIF6zR7dyH1vgo2eD9a-05TC1UraGMQ,174
991
- pex-2.64.1.dist-info/top_level.txt,sha256=HlafJUPu7mfjxv3SDH-RbkxsHOWSVbPXTEBC1hzonpM,4
992
- pex-2.64.1.dist-info/licenses/LICENSE,sha256=bcDgaNzzpbyOBUIFuFt3IOHUkmW7xkv1FdLPeRl99po,11323
993
- pex-2.64.1.dist-info/pylock/pylock.toml,sha256=9TIk5X6BqnJ6lKu8eb0EnzwbBcOjs3QJWzcLMYx8M5k,7151
994
- pex-2.64.1.dist-info/RECORD,,
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,,
File without changes