pex 2.58.1__py2.py3-none-any.whl → 2.59.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 (59) hide show
  1. pex/bin/pex.py +1 -0
  2. pex/cli/commands/venv.py +5 -1
  3. pex/dependency_configuration.py +6 -2
  4. pex/dist_metadata.py +30 -8
  5. pex/docs/html/_pagefind/fragment/en_23dc437.pf_fragment +0 -0
  6. pex/docs/html/_pagefind/fragment/en_3b86fa5.pf_fragment +0 -0
  7. pex/docs/html/_pagefind/fragment/en_65c3a5b.pf_fragment +0 -0
  8. pex/docs/html/_pagefind/fragment/en_6c2e6ff.pf_fragment +0 -0
  9. pex/docs/html/_pagefind/fragment/en_7320871.pf_fragment +0 -0
  10. pex/docs/html/_pagefind/fragment/en_7cfdecb.pf_fragment +0 -0
  11. pex/docs/html/_pagefind/fragment/en_89e2d7c.pf_fragment +0 -0
  12. pex/docs/html/_pagefind/fragment/en_d4675e3.pf_fragment +0 -0
  13. pex/docs/html/_pagefind/index/en_34a4497.pf_index +0 -0
  14. pex/docs/html/_pagefind/pagefind-entry.json +1 -1
  15. pex/docs/html/_pagefind/pagefind.en_4ade7b3598.pf_meta +0 -0
  16. pex/docs/html/_static/documentation_options.js +1 -1
  17. pex/docs/html/api/vars.html +5 -5
  18. pex/docs/html/buildingpex.html +5 -5
  19. pex/docs/html/genindex.html +5 -5
  20. pex/docs/html/index.html +5 -5
  21. pex/docs/html/recipes.html +5 -5
  22. pex/docs/html/scie.html +5 -5
  23. pex/docs/html/search.html +5 -5
  24. pex/docs/html/whatispex.html +5 -5
  25. pex/environment.py +17 -3
  26. pex/pep_425.py +11 -2
  27. pex/pep_427.py +218 -73
  28. pex/pip/installation.py +1 -1
  29. pex/pip/tool.py +1 -1
  30. pex/resolve/configured_resolve.py +20 -0
  31. pex/resolve/configured_resolver.py +7 -3
  32. pex/resolve/pex_repository_resolver.py +1 -1
  33. pex/resolve/resolver_configuration.py +17 -0
  34. pex/resolve/resolver_options.py +88 -16
  35. pex/resolve/resolvers.py +3 -0
  36. pex/resolve/target_options.py +18 -2
  37. pex/resolve/venv_resolver.py +446 -0
  38. pex/resolver.py +2 -4
  39. pex/targets.py +9 -4
  40. pex/vendor/__main__.py +1 -1
  41. pex/version.py +1 -1
  42. pex/wheel.py +89 -27
  43. {pex-2.58.1.dist-info → pex-2.59.0.dist-info}/METADATA +4 -4
  44. {pex-2.58.1.dist-info → pex-2.59.0.dist-info}/RECORD +49 -48
  45. pex/docs/html/_pagefind/fragment/en_1fd6283.pf_fragment +0 -0
  46. pex/docs/html/_pagefind/fragment/en_3981384.pf_fragment +0 -0
  47. pex/docs/html/_pagefind/fragment/en_5b3a816.pf_fragment +0 -0
  48. pex/docs/html/_pagefind/fragment/en_668cbbe.pf_fragment +0 -0
  49. pex/docs/html/_pagefind/fragment/en_69b66dc.pf_fragment +0 -0
  50. pex/docs/html/_pagefind/fragment/en_93e5ea3.pf_fragment +0 -0
  51. pex/docs/html/_pagefind/fragment/en_9ec1cdb.pf_fragment +0 -0
  52. pex/docs/html/_pagefind/fragment/en_edf644d.pf_fragment +0 -0
  53. pex/docs/html/_pagefind/index/en_b7cb935.pf_index +0 -0
  54. pex/docs/html/_pagefind/pagefind.en_bc4997bc6d.pf_meta +0 -0
  55. {pex-2.58.1.dist-info → pex-2.59.0.dist-info}/WHEEL +0 -0
  56. {pex-2.58.1.dist-info → pex-2.59.0.dist-info}/entry_points.txt +0 -0
  57. {pex-2.58.1.dist-info → pex-2.59.0.dist-info}/licenses/LICENSE +0 -0
  58. {pex-2.58.1.dist-info → pex-2.59.0.dist-info}/pylock/pylock.toml +0 -0
  59. {pex-2.58.1.dist-info → pex-2.59.0.dist-info}/top_level.txt +0 -0
pex/bin/pex.py CHANGED
@@ -144,6 +144,7 @@ def configure_clp_pex_resolution(parser):
144
144
  include_pex_lock=True,
145
145
  include_pylock=True,
146
146
  include_pre_resolved=True,
147
+ include_venv_repository=True,
147
148
  )
148
149
 
149
150
  group.add_argument(
pex/cli/commands/venv.py CHANGED
@@ -8,7 +8,7 @@ import logging
8
8
  import os.path
9
9
  from argparse import ArgumentParser, _ActionsContainer
10
10
 
11
- from pex import pex_warnings
11
+ from pex import dependency_configuration, pex_warnings
12
12
  from pex.cli.command import BuildTimeCommand
13
13
  from pex.commands.command import JsonMixin, OutputMixin
14
14
  from pex.common import CopyMode, open_zip, pluralize
@@ -123,8 +123,10 @@ class Venv(OutputMixin, JsonMixin, BuildTimeCommand):
123
123
  include_pex_lock=True,
124
124
  include_pylock=True,
125
125
  include_pre_resolved=True,
126
+ include_venv_repository=True,
126
127
  )
127
128
  requirement_options.register(parser)
129
+ dependency_configuration.register(parser)
128
130
 
129
131
  @classmethod
130
132
  def add_extra_arguments(
@@ -285,11 +287,13 @@ class Venv(OutputMixin, JsonMixin, BuildTimeCommand):
285
287
  )
286
288
 
287
289
  requirement_configuration = requirement_options.configure(self.options)
290
+ dependency_config = dependency_configuration.configure(self.options)
288
291
  with TRACER.timed("Resolving distributions"):
289
292
  resolved = configured_resolve.resolve(
290
293
  targets=targets,
291
294
  requirement_configuration=requirement_configuration,
292
295
  resolver_configuration=resolver_configuration,
296
+ dependency_configuration=dependency_config,
293
297
  )
294
298
 
295
299
  pex = None # type: Optional[PEX]
@@ -141,8 +141,12 @@ class DependencyConfiguration(object):
141
141
  # type: (Requirement) -> Tuple[Requirement, ...]
142
142
  return self.overridden.get(requirement.project_name, ())
143
143
 
144
- def overridden_by(self, requirement, target):
145
- # type: (Requirement, Target) -> Optional[Requirement]
144
+ def overridden_by(
145
+ self,
146
+ requirement, # type: Requirement
147
+ target, # type: Target
148
+ ):
149
+ # type: (...) -> Optional[Requirement]
146
150
  overrides = self.overrides_for(requirement)
147
151
  applicable_overrides = [
148
152
  override for override in overrides if target.requirement_applies(override)
pex/dist_metadata.py CHANGED
@@ -152,15 +152,24 @@ class DistMetadataFile(object):
152
152
  version = attr.ib() # type: Version
153
153
  pkg_info = attr.ib(eq=False) # type: Message
154
154
 
155
- def render_description(self):
156
- # type: () -> str
155
+ def render_metadata_file_description(self, metadata_file_rel_path):
156
+ # type: (Text) -> str
157
157
  return "{project_name} {version} metadata from {rel_path} at {location}".format(
158
158
  project_name=self.project_name,
159
159
  version=self.version,
160
- rel_path=self.rel_path,
160
+ rel_path=metadata_file_rel_path,
161
161
  location=self.location,
162
162
  )
163
163
 
164
+ def render_description(self):
165
+ # type: () -> str
166
+ return self.render_metadata_file_description(self.rel_path)
167
+
168
+ @property
169
+ def path(self):
170
+ # type: () -> Text
171
+ return os.path.join(self.location, self.rel_path)
172
+
164
173
 
165
174
  @attr.s(frozen=True)
166
175
  class MetadataFiles(object):
@@ -182,6 +191,14 @@ class MetadataFiles(object):
182
191
  return None
183
192
  return self._read_function(rel_path)
184
193
 
194
+ def render_description(self, metadata_file_name):
195
+ # type: (Text) -> str
196
+ rel_path = self.metadata_file_rel_path(metadata_file_name)
197
+ return self.metadata.render_metadata_file_description(
198
+ rel_path
199
+ or "{metadata_file_name} not found".format(metadata_file_name=metadata_file_name)
200
+ )
201
+
185
202
 
186
203
  class MetadataType(Enum["MetadataType.Value"]):
187
204
  class Value(Enum.Value):
@@ -210,6 +227,15 @@ class MetadataKey(object):
210
227
  location = attr.ib() # type: Text
211
228
 
212
229
 
230
+ def _read_function(
231
+ location, # type: Text
232
+ rel_path, # type: Text
233
+ ):
234
+ # type: (...) -> bytes
235
+ with open(os.path.join(location, rel_path), "rb") as fp:
236
+ return fp.read()
237
+
238
+
213
239
  def _find_installed_metadata_files(
214
240
  location, # type: Text
215
241
  metadata_type, # type: MetadataType.Value
@@ -218,6 +244,7 @@ def _find_installed_metadata_files(
218
244
  ):
219
245
  # type: (...) -> Iterator[MetadataFiles]
220
246
  metadata_files = glob.glob(os.path.join(location, metadata_dir_glob, metadata_file_name))
247
+ read_function = functools.partial(_read_function, location)
221
248
  for path in metadata_files:
222
249
  with open(path, "rb") as fp:
223
250
  metadata = parse_message(fp.read())
@@ -225,11 +252,6 @@ def _find_installed_metadata_files(
225
252
  source=path, pkg_info=metadata
226
253
  )
227
254
 
228
- def read_function(rel_path):
229
- # type: (Text) -> bytes
230
- with open(os.path.join(location, rel_path), "rb") as fp:
231
- return fp.read()
232
-
233
255
  yield MetadataFiles(
234
256
  metadata=DistMetadataFile(
235
257
  type=metadata_type,
@@ -1 +1 @@
1
- {"version":"1.3.0","languages":{"en":{"hash":"en_bc4997bc6d","wasm":"en","page_count":8}}}
1
+ {"version":"1.3.0","languages":{"en":{"hash":"en_4ade7b3598","wasm":"en","page_count":8}}}
@@ -1,5 +1,5 @@
1
1
  const DOCUMENTATION_OPTIONS = {
2
- VERSION: '2.58.1',
2
+ VERSION: '2.59.0',
3
3
  LANGUAGE: 'en',
4
4
  COLLAPSE_INDEX: false,
5
5
  BUILDER: 'html',
@@ -8,7 +8,7 @@
8
8
  <link rel="prefetch" href="../_static/pex-logo-dark.png" as="image" />
9
9
 
10
10
  <link rel="shortcut icon" href="../_static/pex-icon.png"/><!-- Generated with Sphinx 8.2.3 and Furo 2025.07.19 -->
11
- <title>PEX runtime environment variables - Pex Docs (v2.58.1)</title>
11
+ <title>PEX runtime environment variables - Pex Docs (v2.59.0)</title>
12
12
  <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d111a655" />
13
13
  <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=25af2a20" />
14
14
  <link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -168,7 +168,7 @@
168
168
  </label>
169
169
  </div>
170
170
  <div class="header-center">
171
- <a href="../index.html"><div class="brand">Pex Docs (v2.58.1)</div></a>
171
+ <a href="../index.html"><div class="brand">Pex Docs (v2.59.0)</div></a>
172
172
  </div>
173
173
  <div class="header-right">
174
174
  <div class="theme-toggle-container theme-toggle-header">
@@ -652,12 +652,12 @@
652
652
  </div>
653
653
  <div class="right-details">
654
654
  <div class="icons">
655
- <a class="muted-link " href="https://pypi.org/project/pex/2.58.1/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
655
+ <a class="muted-link " href="https://pypi.org/project/pex/2.59.0/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
656
656
  <path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z">
657
657
  </path>
658
658
  </svg>
659
659
  </a>
660
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.58.1/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
660
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.59.0/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
661
661
  <path d="M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z">
662
662
  </path>
663
663
  </svg>
@@ -680,7 +680,7 @@
680
680
 
681
681
  </aside>
682
682
  </div>
683
- </div><script src="../_static/documentation_options.js?v=b0ba200d"></script>
683
+ </div><script src="../_static/documentation_options.js?v=6517ee4d"></script>
684
684
  <script src="../_static/doctools.js?v=9bcbadda"></script>
685
685
  <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
686
686
  <script src="../_static/scripts/furo.js?v=46bd48cc"></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="prefetch" href="_static/pex-logo-dark.png" as="image" />
9
9
 
10
10
  <link rel="shortcut icon" href="_static/pex-icon.png"/><!-- Generated with Sphinx 8.2.3 and Furo 2025.07.19 -->
11
- <title>Building .pex files - Pex Docs (v2.58.1)</title>
11
+ <title>Building .pex files - Pex Docs (v2.59.0)</title>
12
12
  <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
13
13
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=25af2a20" />
14
14
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -168,7 +168,7 @@
168
168
  </label>
169
169
  </div>
170
170
  <div class="header-center">
171
- <a href="index.html"><div class="brand">Pex Docs (v2.58.1)</div></a>
171
+ <a href="index.html"><div class="brand">Pex Docs (v2.59.0)</div></a>
172
172
  </div>
173
173
  <div class="header-right">
174
174
  <div class="theme-toggle-container theme-toggle-header">
@@ -690,12 +690,12 @@ scary like <code class="docutils literal notranslate"><span class="pre">sudo</sp
690
690
  </div>
691
691
  <div class="right-details">
692
692
  <div class="icons">
693
- <a class="muted-link " href="https://pypi.org/project/pex/2.58.1/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
693
+ <a class="muted-link " href="https://pypi.org/project/pex/2.59.0/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
694
694
  <path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z">
695
695
  </path>
696
696
  </svg>
697
697
  </a>
698
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.58.1/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
698
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.59.0/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
699
699
  <path d="M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z">
700
700
  </path>
701
701
  </svg>
@@ -718,7 +718,7 @@ scary like <code class="docutils literal notranslate"><span class="pre">sudo</sp
718
718
 
719
719
  </aside>
720
720
  </div>
721
- </div><script src="_static/documentation_options.js?v=b0ba200d"></script>
721
+ </div><script src="_static/documentation_options.js?v=6517ee4d"></script>
722
722
  <script src="_static/doctools.js?v=9bcbadda"></script>
723
723
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
724
724
  <script src="_static/scripts/furo.js?v=46bd48cc"></script>
@@ -6,7 +6,7 @@
6
6
  <link rel="prefetch" href="_static/pex-logo-light.png" as="image" />
7
7
  <link rel="prefetch" href="_static/pex-logo-dark.png" as="image" />
8
8
 
9
- <link rel="shortcut icon" href="_static/pex-icon.png"/><!-- Generated with Sphinx 8.2.3 and Furo 2025.07.19 --><title>Index - Pex Docs (v2.58.1)</title>
9
+ <link rel="shortcut icon" href="_static/pex-icon.png"/><!-- Generated with Sphinx 8.2.3 and Furo 2025.07.19 --><title>Index - Pex Docs (v2.59.0)</title>
10
10
  <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
11
11
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=25af2a20" />
12
12
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -166,7 +166,7 @@
166
166
  </label>
167
167
  </div>
168
168
  <div class="header-center">
169
- <a href="index.html"><div class="brand">Pex Docs (v2.58.1)</div></a>
169
+ <a href="index.html"><div class="brand">Pex Docs (v2.59.0)</div></a>
170
170
  </div>
171
171
  <div class="header-right">
172
172
  <div class="theme-toggle-container theme-toggle-header">
@@ -269,12 +269,12 @@
269
269
  </div>
270
270
  <div class="right-details">
271
271
  <div class="icons">
272
- <a class="muted-link " href="https://pypi.org/project/pex/2.58.1/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
272
+ <a class="muted-link " href="https://pypi.org/project/pex/2.59.0/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
273
273
  <path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z">
274
274
  </path>
275
275
  </svg>
276
276
  </a>
277
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.58.1/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
277
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.59.0/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
278
278
  <path d="M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z">
279
279
  </path>
280
280
  </svg>
@@ -297,7 +297,7 @@
297
297
 
298
298
  </aside>
299
299
  </div>
300
- </div><script src="_static/documentation_options.js?v=b0ba200d"></script>
300
+ </div><script src="_static/documentation_options.js?v=6517ee4d"></script>
301
301
  <script src="_static/doctools.js?v=9bcbadda"></script>
302
302
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
303
303
  <script src="_static/scripts/furo.js?v=46bd48cc"></script>
pex/docs/html/index.html CHANGED
@@ -8,7 +8,7 @@
8
8
  <link rel="prefetch" href="_static/pex-logo-dark.png" as="image" />
9
9
 
10
10
  <link rel="shortcut icon" href="_static/pex-icon.png"/><!-- Generated with Sphinx 8.2.3 and Furo 2025.07.19 -->
11
- <title>Pex Docs (v2.58.1)</title>
11
+ <title>Pex Docs (v2.59.0)</title>
12
12
  <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
13
13
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=25af2a20" />
14
14
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -168,7 +168,7 @@
168
168
  </label>
169
169
  </div>
170
170
  <div class="header-center">
171
- <a href="#"><div class="brand">Pex Docs (v2.58.1)</div></a>
171
+ <a href="#"><div class="brand">Pex Docs (v2.59.0)</div></a>
172
172
  </div>
173
173
  <div class="header-right">
174
174
  <div class="theme-toggle-container theme-toggle-header">
@@ -350,12 +350,12 @@ To go straight to building pex files, see <a class="reference internal" href="bu
350
350
  </div>
351
351
  <div class="right-details">
352
352
  <div class="icons">
353
- <a class="muted-link " href="https://pypi.org/project/pex/2.58.1/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
353
+ <a class="muted-link " href="https://pypi.org/project/pex/2.59.0/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
354
354
  <path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z">
355
355
  </path>
356
356
  </svg>
357
357
  </a>
358
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.58.1/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
358
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.59.0/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
359
359
  <path d="M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z">
360
360
  </path>
361
361
  </svg>
@@ -398,7 +398,7 @@ To go straight to building pex files, see <a class="reference internal" href="bu
398
398
 
399
399
  </aside>
400
400
  </div>
401
- </div><script src="_static/documentation_options.js?v=b0ba200d"></script>
401
+ </div><script src="_static/documentation_options.js?v=6517ee4d"></script>
402
402
  <script src="_static/doctools.js?v=9bcbadda"></script>
403
403
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
404
404
  <script src="_static/scripts/furo.js?v=46bd48cc"></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="prefetch" href="_static/pex-logo-dark.png" as="image" />
9
9
 
10
10
  <link rel="shortcut icon" href="_static/pex-icon.png"/><!-- Generated with Sphinx 8.2.3 and Furo 2025.07.19 -->
11
- <title>PEX Recipes and Notes - Pex Docs (v2.58.1)</title>
11
+ <title>PEX Recipes and Notes - Pex Docs (v2.59.0)</title>
12
12
  <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
13
13
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=25af2a20" />
14
14
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -168,7 +168,7 @@
168
168
  </label>
169
169
  </div>
170
170
  <div class="header-center">
171
- <a href="index.html"><div class="brand">Pex Docs (v2.58.1)</div></a>
171
+ <a href="index.html"><div class="brand">Pex Docs (v2.59.0)</div></a>
172
172
  </div>
173
173
  <div class="header-right">
174
174
  <div class="theme-toggle-container theme-toggle-header">
@@ -439,12 +439,12 @@ $<span class="w"> </span><span class="nb">export</span><span class="w"> </span><
439
439
  </div>
440
440
  <div class="right-details">
441
441
  <div class="icons">
442
- <a class="muted-link " href="https://pypi.org/project/pex/2.58.1/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
442
+ <a class="muted-link " href="https://pypi.org/project/pex/2.59.0/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
443
443
  <path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z">
444
444
  </path>
445
445
  </svg>
446
446
  </a>
447
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.58.1/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
447
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.59.0/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
448
448
  <path d="M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z">
449
449
  </path>
450
450
  </svg>
@@ -491,7 +491,7 @@ $<span class="w"> </span><span class="nb">export</span><span class="w"> </span><
491
491
 
492
492
  </aside>
493
493
  </div>
494
- </div><script src="_static/documentation_options.js?v=b0ba200d"></script>
494
+ </div><script src="_static/documentation_options.js?v=6517ee4d"></script>
495
495
  <script src="_static/doctools.js?v=9bcbadda"></script>
496
496
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
497
497
  <script src="_static/scripts/furo.js?v=46bd48cc"></script>
pex/docs/html/scie.html CHANGED
@@ -8,7 +8,7 @@
8
8
  <link rel="prefetch" href="_static/pex-logo-dark.png" as="image" />
9
9
 
10
10
  <link rel="shortcut icon" href="_static/pex-icon.png"/><!-- Generated with Sphinx 8.2.3 and Furo 2025.07.19 -->
11
- <title>PEX with included Python interpreter - Pex Docs (v2.58.1)</title>
11
+ <title>PEX with included Python interpreter - Pex Docs (v2.59.0)</title>
12
12
  <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
13
13
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=25af2a20" />
14
14
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -168,7 +168,7 @@
168
168
  </label>
169
169
  </div>
170
170
  <div class="header-center">
171
- <a href="index.html"><div class="brand">Pex Docs (v2.58.1)</div></a>
171
+ <a href="index.html"><div class="brand">Pex Docs (v2.59.0)</div></a>
172
172
  </div>
173
173
  <div class="header-right">
174
174
  <div class="theme-toggle-container theme-toggle-header">
@@ -632,12 +632,12 @@ uuid
632
632
  </div>
633
633
  <div class="right-details">
634
634
  <div class="icons">
635
- <a class="muted-link " href="https://pypi.org/project/pex/2.58.1/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
635
+ <a class="muted-link " href="https://pypi.org/project/pex/2.59.0/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
636
636
  <path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z">
637
637
  </path>
638
638
  </svg>
639
639
  </a>
640
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.58.1/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
640
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.59.0/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
641
641
  <path d="M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z">
642
642
  </path>
643
643
  </svg>
@@ -681,7 +681,7 @@ uuid
681
681
 
682
682
  </aside>
683
683
  </div>
684
- </div><script src="_static/documentation_options.js?v=b0ba200d"></script>
684
+ </div><script src="_static/documentation_options.js?v=6517ee4d"></script>
685
685
  <script src="_static/doctools.js?v=9bcbadda"></script>
686
686
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
687
687
  <script src="_static/scripts/furo.js?v=46bd48cc"></script>
pex/docs/html/search.html CHANGED
@@ -6,7 +6,7 @@
6
6
  <link rel="prefetch" href="_static/pex-logo-light.png" as="image" />
7
7
  <link rel="prefetch" href="_static/pex-logo-dark.png" as="image" />
8
8
 
9
- <link rel="shortcut icon" href="_static/pex-icon.png"/><!-- Generated with Sphinx 8.2.3 and Furo 2025.07.19 --><title>Search - Pex Docs (v2.58.1)</title><link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
9
+ <link rel="shortcut icon" href="_static/pex-icon.png"/><!-- Generated with Sphinx 8.2.3 and Furo 2025.07.19 --><title>Search - Pex Docs (v2.59.0)</title><link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
10
10
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=25af2a20" />
11
11
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
12
12
 
@@ -181,7 +181,7 @@
181
181
  </label>
182
182
  </div>
183
183
  <div class="header-center">
184
- <a href="index.html"><div class="brand">Pex Docs (v2.58.1)</div></a>
184
+ <a href="index.html"><div class="brand">Pex Docs (v2.59.0)</div></a>
185
185
  </div>
186
186
  <div class="header-right">
187
187
  <div class="theme-toggle-container theme-toggle-header">
@@ -282,12 +282,12 @@
282
282
  </div>
283
283
  <div class="right-details">
284
284
  <div class="icons">
285
- <a class="muted-link " href="https://pypi.org/project/pex/2.58.1/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
285
+ <a class="muted-link " href="https://pypi.org/project/pex/2.59.0/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
286
286
  <path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z">
287
287
  </path>
288
288
  </svg>
289
289
  </a>
290
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.58.1/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
290
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.59.0/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
291
291
  <path d="M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z">
292
292
  </path>
293
293
  </svg>
@@ -310,7 +310,7 @@
310
310
 
311
311
  </aside>
312
312
  </div>
313
- </div><script src="_static/documentation_options.js?v=b0ba200d"></script>
313
+ </div><script src="_static/documentation_options.js?v=6517ee4d"></script>
314
314
  <script src="_static/doctools.js?v=9bcbadda"></script>
315
315
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
316
316
  <script src="_static/scripts/furo.js?v=46bd48cc"></script>
@@ -8,7 +8,7 @@
8
8
  <link rel="prefetch" href="_static/pex-logo-dark.png" as="image" />
9
9
 
10
10
  <link rel="shortcut icon" href="_static/pex-icon.png"/><!-- Generated with Sphinx 8.2.3 and Furo 2025.07.19 -->
11
- <title>What are .pex files? - Pex Docs (v2.58.1)</title>
11
+ <title>What are .pex files? - Pex Docs (v2.59.0)</title>
12
12
  <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
13
13
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=25af2a20" />
14
14
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -168,7 +168,7 @@
168
168
  </label>
169
169
  </div>
170
170
  <div class="header-center">
171
- <a href="index.html"><div class="brand">Pex Docs (v2.58.1)</div></a>
171
+ <a href="index.html"><div class="brand">Pex Docs (v2.59.0)</div></a>
172
172
  </div>
173
173
  <div class="header-right">
174
174
  <div class="theme-toggle-container theme-toggle-header">
@@ -331,12 +331,12 @@ build executable .pex files. This is described more thoroughly in
331
331
  </div>
332
332
  <div class="right-details">
333
333
  <div class="icons">
334
- <a class="muted-link " href="https://pypi.org/project/pex/2.58.1/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
334
+ <a class="muted-link " href="https://pypi.org/project/pex/2.59.0/" aria-label="PyPI"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
335
335
  <path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z">
336
336
  </path>
337
337
  </svg>
338
338
  </a>
339
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.58.1/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
339
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.59.0/pex" aria-label="Download"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
340
340
  <path d="M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z">
341
341
  </path>
342
342
  </svg>
@@ -380,7 +380,7 @@ build executable .pex files. This is described more thoroughly in
380
380
 
381
381
  </aside>
382
382
  </div>
383
- </div><script src="_static/documentation_options.js?v=b0ba200d"></script>
383
+ </div><script src="_static/documentation_options.js?v=6517ee4d"></script>
384
384
  <script src="_static/doctools.js?v=9bcbadda"></script>
385
385
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
386
386
  <script src="_static/scripts/furo.js?v=46bd48cc"></script>
pex/environment.py CHANGED
@@ -66,6 +66,22 @@ def _import_pkg_resources():
66
66
  return None, False
67
67
 
68
68
 
69
+ def _fd_lt(
70
+ self, # type: FingerprintedDistribution
71
+ other, # type: FingerprintedDistribution
72
+ ):
73
+ # type: (...) -> bool
74
+ if self.project_name.normalized < other.project_name.normalized:
75
+ return True
76
+
77
+ # Since we want to rank higher versions higher (earlier) we need to reverse the natural
78
+ # ordering of Version in Distribution which is least to greatest.
79
+ if self.distribution.metadata.version >= other.distribution.metadata.version:
80
+ return True
81
+
82
+ return self.fingerprint < other.fingerprint
83
+
84
+
69
85
  @attr.s(frozen=True)
70
86
  class _RankedDistribution(object):
71
87
  # N.B.: A distribution implements rich comparison with the leading component being the
@@ -77,9 +93,7 @@ class _RankedDistribution(object):
77
93
  # The attr project type stub file simply misses this.
78
94
  _fd_cmp = attr.cmp_using( # type: ignore[attr-defined]
79
95
  eq=FingerprintedDistribution.__eq__,
80
- # Since we want to rank higher versions higher (earlier) we need to reverse the natural
81
- # ordering of Version in Distribution which is least to greatest.
82
- lt=FingerprintedDistribution.__ge__,
96
+ lt=_fd_lt,
83
97
  )
84
98
 
85
99
  @classmethod
pex/pep_425.py CHANGED
@@ -6,11 +6,12 @@ from __future__ import absolute_import
6
6
  import itertools
7
7
  import os.path
8
8
 
9
- from pex.dist_metadata import is_wheel
9
+ from pex.dist_metadata import Distribution, is_wheel
10
10
  from pex.orderedset import OrderedSet
11
11
  from pex.rank import Rank
12
12
  from pex.third_party.packaging.tags import Tag, parse_tag
13
13
  from pex.typing import TYPE_CHECKING, cast, overload
14
+ from pex.wheel import WHEEL
14
15
 
15
16
  if TYPE_CHECKING:
16
17
  from typing import (
@@ -66,7 +67,13 @@ class CompatibilityTags(object):
66
67
 
67
68
  @classmethod
68
69
  def from_wheel(cls, wheel):
69
- # type: (Text) -> CompatibilityTags
70
+ # type: (Union[Text, Distribution]) -> CompatibilityTags
71
+
72
+ if isinstance(wheel, Distribution):
73
+ if not is_wheel(wheel.location):
74
+ return cls(tags=WHEEL.from_distribution(wheel).tags)
75
+ wheel = wheel.location
76
+
70
77
  if not is_wheel(wheel):
71
78
  raise ValueError(
72
79
  "Can only calculate wheel tags from a filename that ends in .whl per "
@@ -74,6 +81,7 @@ class CompatibilityTags(object):
74
81
  wheel=wheel
75
82
  )
76
83
  )
84
+
77
85
  wheel_stem, _ = os.path.splitext(os.path.basename(wheel))
78
86
  # Wheel filename format: https://peps.python.org/pep-0427/#file-name-convention
79
87
  # `{distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform tag}.whl`
@@ -86,6 +94,7 @@ class CompatibilityTags(object):
86
94
  pattern=pattern, wheel=wheel
87
95
  )
88
96
  )
97
+
89
98
  return cls(tags=tuple(parse_tag("-".join(wheel_components[-3:]))))
90
99
 
91
100
  @classmethod