pex 2.66.1__py2.py3-none-any.whl → 2.67.1__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 (43) hide show
  1. pex/dist_metadata.py +1 -1
  2. pex/docs/html/_pagefind/fragment/en_119a8a8.pf_fragment +0 -0
  3. pex/docs/html/_pagefind/fragment/en_39d722b.pf_fragment +0 -0
  4. pex/docs/html/_pagefind/fragment/en_4d20267.pf_fragment +0 -0
  5. pex/docs/html/_pagefind/fragment/en_513cb9b.pf_fragment +0 -0
  6. pex/docs/html/_pagefind/fragment/en_58fed73.pf_fragment +0 -0
  7. pex/docs/html/_pagefind/fragment/en_889d8c7.pf_fragment +0 -0
  8. pex/docs/html/_pagefind/fragment/en_cfaf4ce.pf_fragment +0 -0
  9. pex/docs/html/_pagefind/fragment/en_ed9cf13.pf_fragment +0 -0
  10. pex/docs/html/_pagefind/index/{en_5564892.pf_index → en_eeef12e.pf_index} +0 -0
  11. pex/docs/html/_pagefind/pagefind-entry.json +1 -1
  12. pex/docs/html/_pagefind/pagefind.en_e36d294ae1.pf_meta +0 -0
  13. pex/docs/html/_static/documentation_options.js +1 -1
  14. pex/docs/html/api/vars.html +5 -5
  15. pex/docs/html/buildingpex.html +5 -5
  16. pex/docs/html/genindex.html +5 -5
  17. pex/docs/html/index.html +5 -5
  18. pex/docs/html/recipes.html +5 -5
  19. pex/docs/html/scie.html +5 -5
  20. pex/docs/html/search.html +5 -5
  21. pex/docs/html/whatispex.html +5 -5
  22. pex/jobs.py +13 -6
  23. pex/resolve/configured_resolve.py +13 -5
  24. pex/resolve/resolver_configuration.py +1 -1
  25. pex/resolve/resolver_options.py +14 -9
  26. pex/resolve/venv_resolver.py +189 -55
  27. pex/version.py +1 -1
  28. {pex-2.66.1.dist-info → pex-2.67.1.dist-info}/METADATA +4 -4
  29. {pex-2.66.1.dist-info → pex-2.67.1.dist-info}/RECORD +34 -34
  30. pex/docs/html/_pagefind/fragment/en_30a274f.pf_fragment +0 -0
  31. pex/docs/html/_pagefind/fragment/en_32bca6c.pf_fragment +0 -0
  32. pex/docs/html/_pagefind/fragment/en_415e2ea.pf_fragment +0 -0
  33. pex/docs/html/_pagefind/fragment/en_bcccea1.pf_fragment +0 -0
  34. pex/docs/html/_pagefind/fragment/en_ca898f2.pf_fragment +0 -0
  35. pex/docs/html/_pagefind/fragment/en_d4c744d.pf_fragment +0 -0
  36. pex/docs/html/_pagefind/fragment/en_f2ec11e.pf_fragment +0 -0
  37. pex/docs/html/_pagefind/fragment/en_f3e451d.pf_fragment +0 -0
  38. pex/docs/html/_pagefind/pagefind.en_421bc6c608.pf_meta +0 -0
  39. {pex-2.66.1.dist-info → pex-2.67.1.dist-info}/WHEEL +0 -0
  40. {pex-2.66.1.dist-info → pex-2.67.1.dist-info}/entry_points.txt +0 -0
  41. {pex-2.66.1.dist-info → pex-2.67.1.dist-info}/licenses/LICENSE +0 -0
  42. {pex-2.66.1.dist-info → pex-2.67.1.dist-info}/pylock/pylock.toml +0 -0
  43. {pex-2.66.1.dist-info → pex-2.67.1.dist-info}/top_level.txt +0 -0
pex/dist_metadata.py CHANGED
@@ -780,7 +780,7 @@ class Constraint(object):
780
780
  )
781
781
 
782
782
  name = attr.ib(eq=False) # type: str
783
- specifier = attr.ib(factory=SpecifierSet) # type: SpecifierSet
783
+ specifier = attr.ib(factory=SpecifierSet, order=False) # type: SpecifierSet
784
784
  marker = attr.ib(default=None, eq=str) # type: Optional[Marker]
785
785
 
786
786
  project_name = attr.ib(init=False, repr=False) # type: ProjectName
@@ -1 +1 @@
1
- {"version":"1.3.0","languages":{"en":{"hash":"en_421bc6c608","wasm":"en","page_count":8}}}
1
+ {"version":"1.3.0","languages":{"en":{"hash":"en_e36d294ae1","wasm":"en","page_count":8}}}
@@ -1,5 +1,5 @@
1
1
  const DOCUMENTATION_OPTIONS = {
2
- VERSION: '2.66.1',
2
+ VERSION: '2.67.1',
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.09.25 -->
11
- <title>PEX runtime environment variables - Pex Docs (v2.66.1)</title>
11
+ <title>PEX runtime environment variables - Pex Docs (v2.67.1)</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=580074bf" />
14
14
  <link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -163,7 +163,7 @@
163
163
  </label>
164
164
  </div>
165
165
  <div class="header-center">
166
- <a href="../index.html"><div class="brand">Pex Docs (v2.66.1)</div></a>
166
+ <a href="../index.html"><div class="brand">Pex Docs (v2.67.1)</div></a>
167
167
  </div>
168
168
  <div class="header-right">
169
169
  <div class="theme-toggle-container theme-toggle-header">
@@ -643,12 +643,12 @@
643
643
  </div>
644
644
  <div class="right-details">
645
645
  <div class="icons">
646
- <a class="muted-link " href="https://pypi.org/project/pex/2.66.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">
646
+ <a class="muted-link " href="https://pypi.org/project/pex/2.67.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">
647
647
  <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">
648
648
  </path>
649
649
  </svg>
650
650
  </a>
651
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.66.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">
651
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.67.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">
652
652
  <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">
653
653
  </path>
654
654
  </svg>
@@ -671,7 +671,7 @@
671
671
 
672
672
  </aside>
673
673
  </div>
674
- </div><script src="../_static/documentation_options.js?v=403681fe"></script>
674
+ </div><script src="../_static/documentation_options.js?v=31e3cba7"></script>
675
675
  <script src="../_static/doctools.js?v=9bcbadda"></script>
676
676
  <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
677
677
  <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.09.25 -->
11
- <title>Building .pex files - Pex Docs (v2.66.1)</title>
11
+ <title>Building .pex files - Pex Docs (v2.67.1)</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=580074bf" />
14
14
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -163,7 +163,7 @@
163
163
  </label>
164
164
  </div>
165
165
  <div class="header-center">
166
- <a href="index.html"><div class="brand">Pex Docs (v2.66.1)</div></a>
166
+ <a href="index.html"><div class="brand">Pex Docs (v2.67.1)</div></a>
167
167
  </div>
168
168
  <div class="header-right">
169
169
  <div class="theme-toggle-container theme-toggle-header">
@@ -681,12 +681,12 @@ scary like <code class="docutils literal notranslate"><span class="pre">sudo</sp
681
681
  </div>
682
682
  <div class="right-details">
683
683
  <div class="icons">
684
- <a class="muted-link " href="https://pypi.org/project/pex/2.66.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">
684
+ <a class="muted-link " href="https://pypi.org/project/pex/2.67.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">
685
685
  <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">
686
686
  </path>
687
687
  </svg>
688
688
  </a>
689
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.66.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">
689
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.67.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">
690
690
  <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">
691
691
  </path>
692
692
  </svg>
@@ -709,7 +709,7 @@ scary like <code class="docutils literal notranslate"><span class="pre">sudo</sp
709
709
 
710
710
  </aside>
711
711
  </div>
712
- </div><script src="_static/documentation_options.js?v=403681fe"></script>
712
+ </div><script src="_static/documentation_options.js?v=31e3cba7"></script>
713
713
  <script src="_static/doctools.js?v=9bcbadda"></script>
714
714
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
715
715
  <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.09.25 --><title>Index - Pex Docs (v2.66.1)</title>
9
+ <link rel="shortcut icon" href="_static/pex-icon.png"><!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25 --><title>Index - Pex Docs (v2.67.1)</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=580074bf" />
12
12
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -161,7 +161,7 @@
161
161
  </label>
162
162
  </div>
163
163
  <div class="header-center">
164
- <a href="index.html"><div class="brand">Pex Docs (v2.66.1)</div></a>
164
+ <a href="index.html"><div class="brand">Pex Docs (v2.67.1)</div></a>
165
165
  </div>
166
166
  <div class="header-right">
167
167
  <div class="theme-toggle-container theme-toggle-header">
@@ -260,12 +260,12 @@
260
260
  </div>
261
261
  <div class="right-details">
262
262
  <div class="icons">
263
- <a class="muted-link " href="https://pypi.org/project/pex/2.66.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">
263
+ <a class="muted-link " href="https://pypi.org/project/pex/2.67.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">
264
264
  <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">
265
265
  </path>
266
266
  </svg>
267
267
  </a>
268
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.66.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">
268
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.67.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">
269
269
  <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">
270
270
  </path>
271
271
  </svg>
@@ -288,7 +288,7 @@
288
288
 
289
289
  </aside>
290
290
  </div>
291
- </div><script src="_static/documentation_options.js?v=403681fe"></script>
291
+ </div><script src="_static/documentation_options.js?v=31e3cba7"></script>
292
292
  <script src="_static/doctools.js?v=9bcbadda"></script>
293
293
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
294
294
  <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.09.25 -->
11
- <title>Pex Docs (v2.66.1)</title>
11
+ <title>Pex Docs (v2.67.1)</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=580074bf" />
14
14
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -163,7 +163,7 @@
163
163
  </label>
164
164
  </div>
165
165
  <div class="header-center">
166
- <a href="#"><div class="brand">Pex Docs (v2.66.1)</div></a>
166
+ <a href="#"><div class="brand">Pex Docs (v2.67.1)</div></a>
167
167
  </div>
168
168
  <div class="header-right">
169
169
  <div class="theme-toggle-container theme-toggle-header">
@@ -341,12 +341,12 @@ To go straight to building pex files, see <a class="reference internal" href="bu
341
341
  </div>
342
342
  <div class="right-details">
343
343
  <div class="icons">
344
- <a class="muted-link " href="https://pypi.org/project/pex/2.66.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">
344
+ <a class="muted-link " href="https://pypi.org/project/pex/2.67.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">
345
345
  <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">
346
346
  </path>
347
347
  </svg>
348
348
  </a>
349
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.66.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">
349
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.67.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">
350
350
  <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">
351
351
  </path>
352
352
  </svg>
@@ -389,7 +389,7 @@ To go straight to building pex files, see <a class="reference internal" href="bu
389
389
 
390
390
  </aside>
391
391
  </div>
392
- </div><script src="_static/documentation_options.js?v=403681fe"></script>
392
+ </div><script src="_static/documentation_options.js?v=31e3cba7"></script>
393
393
  <script src="_static/doctools.js?v=9bcbadda"></script>
394
394
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
395
395
  <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.09.25 -->
11
- <title>PEX Recipes and Notes - Pex Docs (v2.66.1)</title>
11
+ <title>PEX Recipes and Notes - Pex Docs (v2.67.1)</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=580074bf" />
14
14
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -163,7 +163,7 @@
163
163
  </label>
164
164
  </div>
165
165
  <div class="header-center">
166
- <a href="index.html"><div class="brand">Pex Docs (v2.66.1)</div></a>
166
+ <a href="index.html"><div class="brand">Pex Docs (v2.67.1)</div></a>
167
167
  </div>
168
168
  <div class="header-right">
169
169
  <div class="theme-toggle-container theme-toggle-header">
@@ -430,12 +430,12 @@ $<span class="w"> </span><span class="nb">export</span><span class="w"> </span><
430
430
  </div>
431
431
  <div class="right-details">
432
432
  <div class="icons">
433
- <a class="muted-link " href="https://pypi.org/project/pex/2.66.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">
433
+ <a class="muted-link " href="https://pypi.org/project/pex/2.67.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">
434
434
  <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">
435
435
  </path>
436
436
  </svg>
437
437
  </a>
438
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.66.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">
438
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.67.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">
439
439
  <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">
440
440
  </path>
441
441
  </svg>
@@ -482,7 +482,7 @@ $<span class="w"> </span><span class="nb">export</span><span class="w"> </span><
482
482
 
483
483
  </aside>
484
484
  </div>
485
- </div><script src="_static/documentation_options.js?v=403681fe"></script>
485
+ </div><script src="_static/documentation_options.js?v=31e3cba7"></script>
486
486
  <script src="_static/doctools.js?v=9bcbadda"></script>
487
487
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
488
488
  <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.09.25 -->
11
- <title>PEX with included Python interpreter - Pex Docs (v2.66.1)</title>
11
+ <title>PEX with included Python interpreter - Pex Docs (v2.67.1)</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=580074bf" />
14
14
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -163,7 +163,7 @@
163
163
  </label>
164
164
  </div>
165
165
  <div class="header-center">
166
- <a href="index.html"><div class="brand">Pex Docs (v2.66.1)</div></a>
166
+ <a href="index.html"><div class="brand">Pex Docs (v2.67.1)</div></a>
167
167
  </div>
168
168
  <div class="header-right">
169
169
  <div class="theme-toggle-container theme-toggle-header">
@@ -623,12 +623,12 @@ uuid
623
623
  </div>
624
624
  <div class="right-details">
625
625
  <div class="icons">
626
- <a class="muted-link " href="https://pypi.org/project/pex/2.66.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">
626
+ <a class="muted-link " href="https://pypi.org/project/pex/2.67.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">
627
627
  <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">
628
628
  </path>
629
629
  </svg>
630
630
  </a>
631
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.66.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">
631
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.67.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">
632
632
  <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">
633
633
  </path>
634
634
  </svg>
@@ -672,7 +672,7 @@ uuid
672
672
 
673
673
  </aside>
674
674
  </div>
675
- </div><script src="_static/documentation_options.js?v=403681fe"></script>
675
+ </div><script src="_static/documentation_options.js?v=31e3cba7"></script>
676
676
  <script src="_static/doctools.js?v=9bcbadda"></script>
677
677
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
678
678
  <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.09.25 --><title>Search - Pex Docs (v2.66.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.09.25 --><title>Search - Pex Docs (v2.67.1)</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=580074bf" />
11
11
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
12
12
 
@@ -176,7 +176,7 @@
176
176
  </label>
177
177
  </div>
178
178
  <div class="header-center">
179
- <a href="index.html"><div class="brand">Pex Docs (v2.66.1)</div></a>
179
+ <a href="index.html"><div class="brand">Pex Docs (v2.67.1)</div></a>
180
180
  </div>
181
181
  <div class="header-right">
182
182
  <div class="theme-toggle-container theme-toggle-header">
@@ -273,12 +273,12 @@
273
273
  </div>
274
274
  <div class="right-details">
275
275
  <div class="icons">
276
- <a class="muted-link " href="https://pypi.org/project/pex/2.66.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">
276
+ <a class="muted-link " href="https://pypi.org/project/pex/2.67.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">
277
277
  <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">
278
278
  </path>
279
279
  </svg>
280
280
  </a>
281
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.66.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">
281
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.67.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">
282
282
  <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">
283
283
  </path>
284
284
  </svg>
@@ -301,7 +301,7 @@
301
301
 
302
302
  </aside>
303
303
  </div>
304
- </div><script src="_static/documentation_options.js?v=403681fe"></script>
304
+ </div><script src="_static/documentation_options.js?v=31e3cba7"></script>
305
305
  <script src="_static/doctools.js?v=9bcbadda"></script>
306
306
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
307
307
  <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.09.25 -->
11
- <title>What are .pex files? - Pex Docs (v2.66.1)</title>
11
+ <title>What are .pex files? - Pex Docs (v2.67.1)</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=580074bf" />
14
14
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -163,7 +163,7 @@
163
163
  </label>
164
164
  </div>
165
165
  <div class="header-center">
166
- <a href="index.html"><div class="brand">Pex Docs (v2.66.1)</div></a>
166
+ <a href="index.html"><div class="brand">Pex Docs (v2.67.1)</div></a>
167
167
  </div>
168
168
  <div class="header-right">
169
169
  <div class="theme-toggle-container theme-toggle-header">
@@ -322,12 +322,12 @@ build executable .pex files. This is described more thoroughly in
322
322
  </div>
323
323
  <div class="right-details">
324
324
  <div class="icons">
325
- <a class="muted-link " href="https://pypi.org/project/pex/2.66.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">
325
+ <a class="muted-link " href="https://pypi.org/project/pex/2.67.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">
326
326
  <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">
327
327
  </path>
328
328
  </svg>
329
329
  </a>
330
- <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.66.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">
330
+ <a class="muted-link " href="https://github.com/pex-tool/pex/releases/download/v2.67.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">
331
331
  <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">
332
332
  </path>
333
333
  </svg>
@@ -371,7 +371,7 @@ build executable .pex files. This is described more thoroughly in
371
371
 
372
372
  </aside>
373
373
  </div>
374
- </div><script src="_static/documentation_options.js?v=403681fe"></script>
374
+ </div><script src="_static/documentation_options.js?v=31e3cba7"></script>
375
375
  <script src="_static/doctools.js?v=9bcbadda"></script>
376
376
  <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
377
377
  <script src="_static/scripts/furo.js?v=46bd48cc"></script>
pex/jobs.py CHANGED
@@ -724,6 +724,19 @@ def iter_map_parallel(
724
724
  if not input_items:
725
725
  return
726
726
 
727
+ # We want each of the job slots to process MULTIPROCESSING_DEFAULT_MIN_AVERAGE_LOAD on
728
+ # average in order to overcome multiprocessing overheads. If we don't need at least 2 slots, we
729
+ # are unlikely to get any boost from multiprocessing.
730
+ needed_slots = len(input_items) // min_average_load
731
+ if needed_slots < 2:
732
+ for item in input_items:
733
+ yield function(item)
734
+ return
735
+
736
+ # Of course, if there are fewer available cores than that or the user has pinned max jobs lower,
737
+ # we clamp to that.
738
+ pool_size = min(needed_slots, _sanitize_max_jobs(max_jobs))
739
+
727
740
  if costing_function is not None:
728
741
  # We ensure no job slot is so unlucky as to get all the biggest jobs and thus become an
729
742
  # un-necessarily long pole by sorting based on cost. Some examples to illustrate the effect
@@ -740,12 +753,6 @@ def iter_map_parallel(
740
753
  #
741
754
  input_items.sort(key=costing_function, reverse=True)
742
755
 
743
- # We want each of the job slots above to process MULTIPROCESSING_DEFAULT_MIN_AVERAGE_LOAD on
744
- # average in order to overcome multiprocessing overheads. Of course, if there are fewer
745
- # available cores than that or the user has pinned max jobs lower, we clamp to that. Finally, we
746
- # always want at least two slots to ensure we process input items in parallel.
747
- pool_size = max(2, min(len(input_items) // min_average_load, _sanitize_max_jobs(max_jobs)))
748
-
749
756
  apply_function = functools.partial(_apply_function, function)
750
757
 
751
758
  slots = defaultdict(list) # type: DefaultDict[int, List[float]]
@@ -20,7 +20,7 @@ from pex.resolve.resolver_configuration import (
20
20
  VenvRepositoryConfiguration,
21
21
  )
22
22
  from pex.resolve.resolvers import ResolveResult
23
- from pex.resolve.venv_resolver import resolve_from_venv
23
+ from pex.resolve.venv_resolver import resolve_from_venvs
24
24
  from pex.resolver import resolve as resolve_via_pip
25
25
  from pex.result import try_
26
26
  from pex.targets import Targets
@@ -143,14 +143,22 @@ def resolve(
143
143
  )
144
144
  elif isinstance(resolver_configuration, VenvRepositoryConfiguration):
145
145
  with TRACER.timed(
146
- "Resolving requirements from venv at {venv}.".format(
147
- venv=resolver_configuration.venv.venv_dir
146
+ "Resolving requirements from {count} {venvs} at:{paths}.".format(
147
+ count=len(resolver_configuration.venvs),
148
+ venvs=pluralize(resolver_configuration.venvs, "venv"),
149
+ paths=(
150
+ " {venv}".format(venv=resolver_configuration.venvs[0].venv_dir)
151
+ if len(resolver_configuration.venvs) == 1
152
+ else "\n {venvs}".format(
153
+ venvs="\n ".join(venv.venv_dir for venv in resolver_configuration.venvs)
154
+ )
155
+ ),
148
156
  )
149
157
  ):
150
158
  return try_(
151
- resolve_from_venv(
159
+ resolve_from_venvs(
152
160
  targets=targets,
153
- venv=resolver_configuration.venv,
161
+ venvs=resolver_configuration.venvs,
154
162
  requirement_configuration=requirement_configuration,
155
163
  pip_configuration=resolver_configuration.pip_configuration,
156
164
  compile=compile_pyc,
@@ -251,7 +251,7 @@ class PreResolvedConfiguration(object):
251
251
 
252
252
  @attr.s(frozen=True)
253
253
  class VenvRepositoryConfiguration(object):
254
- venv = attr.ib() # type: Virtualenv
254
+ venvs = attr.ib() # type: Tuple[Virtualenv, ...]
255
255
  pip_configuration = attr.ib() # type: PipConfiguration
256
256
 
257
257
  @property
@@ -56,9 +56,10 @@ class _HandleTransitiveAction(Action):
56
56
  class _ResolveVenvAction(Action):
57
57
  def __init__(self, *args, **kwargs):
58
58
  kwargs["nargs"] = "?"
59
- super(_ResolveVenvAction, self).__init__(*args, **kwargs)
59
+ super(_ResolveVenvAction, self).__init__(*args, default=[], **kwargs)
60
60
 
61
61
  def __call__(self, parser, namespace, value, option_str=None):
62
+ venvs = getattr(namespace, self.dest)
62
63
  if value:
63
64
  if not os.path.exists(value):
64
65
  raise ArgumentError(
@@ -86,7 +87,7 @@ class _ResolveVenvAction(Action):
86
87
  "path.".format(option=option_str, value=value)
87
88
  ),
88
89
  )
89
- setattr(namespace, self.dest, venv)
90
+ venvs.append(venv)
90
91
  else:
91
92
  current_venv = Virtualenv.enclosing(python=sys.executable)
92
93
  if not current_venv:
@@ -105,7 +106,7 @@ class _ResolveVenvAction(Action):
105
106
  )
106
107
  ),
107
108
  )
108
- setattr(namespace, self.dest, current_venv)
109
+ venvs.append(current_venv)
109
110
 
110
111
 
111
112
  def register(
@@ -320,14 +321,18 @@ def register(
320
321
  if include_venv_repository:
321
322
  repository_choice.add_argument(
322
323
  "--venv-repository",
323
- dest="venv_repository",
324
+ dest="venv_repositories",
324
325
  action=_ResolveVenvAction,
325
- type=str,
326
326
  help=(
327
327
  "Resolve requirements from the given virtual environment instead of from "
328
328
  "--index servers, --find-links repos or a --lock file. The virtual environment to "
329
329
  "resolve from can be specified as the path to the venv or the path of its"
330
- "interpreter. If no value is specified, the current active venv is used."
330
+ "interpreter. If no value is specified, the current active venv is used. Multiple "
331
+ "virtual environments may be specified via multiple --venv-repository options and "
332
+ "the resolve will be the combined results. Each virtual environment will be "
333
+ "resolved from individually and must contain the full transitive closure of "
334
+ "requirements. This allows for creating a multi-platform PEX by specifying "
335
+ "multiple virtual environments; say one for Python 3.12 and one for Python 3.13."
331
336
  ),
332
337
  )
333
338
 
@@ -803,9 +808,9 @@ def configure(
803
808
  sdists=tuple(sdists), wheels=tuple(wheels), pip_configuration=pip_configuration
804
809
  )
805
810
 
806
- venv = getattr(options, "venv_repository", None)
807
- if venv:
808
- return VenvRepositoryConfiguration(venv=venv, pip_configuration=pip_configuration)
811
+ venvs = getattr(options, "venv_repositories", None)
812
+ if venvs:
813
+ return VenvRepositoryConfiguration(venvs=tuple(venvs), pip_configuration=pip_configuration)
809
814
 
810
815
  if pylock:
811
816
  return PylockRepositoryConfiguration(
@@ -5,14 +5,13 @@ from __future__ import absolute_import
5
5
 
6
6
  import functools
7
7
  import hashlib
8
- import itertools
9
8
  import os
10
9
  from collections import defaultdict, deque
11
10
 
12
11
  from pex import pex_warnings
13
12
  from pex.atomic_directory import atomic_directory
14
13
  from pex.cache.dirs import CacheDir, InstalledWheelDir
15
- from pex.common import safe_relative_symlink
14
+ from pex.common import pluralize, safe_relative_symlink
16
15
  from pex.compatibility import commonpath
17
16
  from pex.dependency_configuration import DependencyConfiguration
18
17
  from pex.dist_metadata import (
@@ -26,7 +25,6 @@ from pex.dist_metadata import (
26
25
  from pex.exceptions import production_assert, reportable_unexpected_error_msg
27
26
  from pex.fingerprinted_distribution import FingerprintedDistribution
28
27
  from pex.installed_wheel import InstalledWheel
29
- from pex.interpreter import PythonInterpreter
30
28
  from pex.jobs import DEFAULT_MAX_JOBS, iter_map_parallel
31
29
  from pex.orderedset import OrderedSet
32
30
  from pex.pep_376 import Record
@@ -47,7 +45,18 @@ from pex.wheel import WHEEL, Wheel
47
45
  from pex.whl import repacked_whl
48
46
 
49
47
  if TYPE_CHECKING:
50
- from typing import DefaultDict, Deque, FrozenSet, Iterable, Iterator, List, Mapping, Set, Union
48
+ from typing import (
49
+ DefaultDict,
50
+ Deque,
51
+ FrozenSet,
52
+ Iterable,
53
+ Iterator,
54
+ List,
55
+ Mapping,
56
+ Set,
57
+ Tuple,
58
+ Union,
59
+ )
51
60
 
52
61
  import attr # vendor:skip
53
62
  else:
@@ -96,12 +105,14 @@ def _normalize_record(
96
105
 
97
106
 
98
107
  def _install_distribution(
99
- interpreter, # type: PythonInterpreter
108
+ venv_distribution, # type: VenvDistribution
100
109
  result_type, # type: InstallableType.Value
101
110
  use_system_time, # type: bool
102
- distribution, # type: Distribution
103
111
  ):
104
- # type: (...) -> FingerprintedDistribution
112
+ # type: (...) -> ResolvedDistribution
113
+
114
+ interpreter = venv_distribution.target.interpreter
115
+ distribution = venv_distribution.distribution
105
116
 
106
117
  production_assert(distribution.type is DistributionType.INSTALLED)
107
118
  production_assert(distribution.metadata.files.metadata.type is MetadataType.DIST_INFO)
@@ -160,31 +171,86 @@ def _install_distribution(
160
171
  raise AssertionError(reportable_unexpected_error_msg())
161
172
 
162
173
  if result_type is InstallableType.INSTALLED_WHEEL_CHROOT:
163
- return FingerprintedDistribution(
164
- distribution=Distribution.load(installed_wheel.prefix_dir),
165
- fingerprint=installed_wheel.fingerprint,
174
+ return ResolvedDistribution(
175
+ target=venv_distribution.target,
176
+ fingerprinted_distribution=FingerprintedDistribution(
177
+ distribution=Distribution.load(installed_wheel.prefix_dir),
178
+ fingerprint=installed_wheel.fingerprint,
179
+ ),
180
+ direct_requirements=venv_distribution.direct_requirements,
166
181
  )
167
- return repacked_whl(
168
- installed_wheel, fingerprint=installed_wheel.fingerprint, use_system_time=use_system_time
182
+
183
+ return ResolvedDistribution(
184
+ target=venv_distribution.target,
185
+ fingerprinted_distribution=repacked_whl(
186
+ installed_wheel,
187
+ fingerprint=installed_wheel.fingerprint,
188
+ use_system_time=use_system_time,
189
+ ),
190
+ direct_requirements=venv_distribution.direct_requirements,
169
191
  )
170
192
 
171
193
 
194
+ @attr.s(frozen=True)
195
+ class VenvDistribution(object):
196
+ target = attr.ib() # type: LocalInterpreter
197
+ distribution = attr.ib() # type: Distribution
198
+ direct_requirements = attr.ib() # type: Iterable[Requirement]
199
+
200
+
172
201
  def _install_venv_distributions(
173
- venv, # type: Virtualenv
174
- distributions, # type: Iterable[Distribution]
202
+ venv_resolve_results, # type: Iterable[VenvResolveResult]
175
203
  max_install_jobs=DEFAULT_MAX_JOBS, # type: int
176
204
  result_type=InstallableType.INSTALLED_WHEEL_CHROOT, # type: InstallableType.Value
177
205
  use_system_time=False, # type: bool
178
206
  ):
179
- # type: (...) -> Iterator[FingerprintedDistribution]
207
+ # type: (...) -> Iterator[ResolvedDistribution]
208
+
209
+ seen = set() # type: Set[str]
210
+
211
+ venv_distributions = [] # type: List[VenvDistribution]
212
+ for venv_resolve_result in venv_resolve_results:
213
+ target = venv_resolve_result.target
214
+ direct_requirements = venv_resolve_result.direct_requirements_by_project_name
215
+ for re_resolved_distribution in venv_resolve_result.re_resolved_distributions:
216
+ wheel_file_name = Wheel.from_distribution(
217
+ re_resolved_distribution.distribution
218
+ ).wheel_file_name
219
+ if wheel_file_name in seen:
220
+ continue
221
+
222
+ seen.add(wheel_file_name)
223
+ yield ResolvedDistribution(
224
+ target=target,
225
+ fingerprinted_distribution=re_resolved_distribution,
226
+ direct_requirements=direct_requirements.get(
227
+ re_resolved_distribution.project_name, ()
228
+ ),
229
+ )
230
+ for venv_distribution in venv_resolve_result.venv_distributions:
231
+ wheel_file_name = Wheel.from_distribution(venv_distribution).wheel_file_name
232
+ if wheel_file_name in seen:
233
+ continue
234
+
235
+ seen.add(wheel_file_name)
236
+ venv_distributions.append(
237
+ VenvDistribution(
238
+ target=target,
239
+ distribution=venv_distribution,
240
+ direct_requirements=direct_requirements.get(
241
+ venv_distribution.metadata.project_name, ()
242
+ ),
243
+ )
244
+ )
180
245
 
181
- return iter_map_parallel(
182
- inputs=distributions,
246
+ for resolved_distribution in iter_map_parallel(
247
+ inputs=venv_distributions,
183
248
  function=functools.partial(
184
- _install_distribution, venv.interpreter, result_type, use_system_time
249
+ _install_distribution, result_type=result_type, use_system_time=use_system_time
185
250
  ),
186
251
  max_jobs=max_install_jobs,
187
- )
252
+ ):
253
+ yield resolved_distribution
188
254
 
189
255
 
190
256
  @attr.s(frozen=True)
@@ -359,27 +425,32 @@ def _resolve_distributions(
359
425
  )
360
426
 
361
427
 
362
- def resolve_from_venv(
363
- targets, # type: Targets
428
+ @attr.s(frozen=True)
429
+ class VenvResolveResult(object):
430
+ venv = attr.ib() # type: Virtualenv
431
+ venv_distributions = attr.ib() # type: Tuple[Distribution, ...]
432
+ re_resolved_distributions = attr.ib() # type: Tuple[FingerprintedDistribution, ...]
433
+ direct_requirements_by_project_name = attr.ib(
434
+ eq=False
435
+ ) # type: Mapping[ProjectName, Iterable[Requirement]]
436
+
437
+ @property
438
+ def target(self):
439
+ # type: () -> LocalInterpreter
440
+ return LocalInterpreter.create(self.venv.interpreter)
441
+
442
+
443
+ def _resolve_from_venv(
364
444
  venv, # type: Virtualenv
365
- requirement_configuration=RequirementConfiguration(), # type: RequirementConfiguration
366
- pip_configuration=PipConfiguration(), # type: PipConfiguration
367
- compile=False, # type: bool
368
- ignore_errors=False, # type: bool
369
- result_type=InstallableType.INSTALLED_WHEEL_CHROOT, # type: InstallableType.Value
370
- dependency_configuration=DependencyConfiguration(), # type: DependencyConfiguration
445
+ requirement_configuration, # type: RequirementConfiguration
446
+ pip_configuration, # type: PipConfiguration
447
+ compile, # type: bool
448
+ ignore_errors, # type: bool
449
+ result_type, # type: InstallableType.Value
450
+ dependency_configuration, # type: DependencyConfiguration
371
451
  ):
372
- # type: (...) -> Union[ResolveResult, Error]
373
-
452
+ # type: (...) -> Union[VenvResolveResult, Error]
374
453
  target = LocalInterpreter.create(venv.interpreter)
375
- if not targets.is_empty:
376
- return Error(
377
- "You configured custom targets via --python, --interpreter-constraint, --platform or "
378
- "--complete-platform but custom targets are not allowed when resolving from a virtual "
379
- "environment.\n"
380
- "For such resolves, the supported target is implicitly the one matching the venv "
381
- "interpreter; in this case: {target}.".format(target=target.render_description())
382
- )
383
454
 
384
455
  if pip_configuration.version:
385
456
  compatible_pip_version = (
@@ -487,27 +558,90 @@ def resolve_from_venv(
487
558
  dist.fingerprinted_distribution for dist in result.distributions
488
559
  )
489
560
 
561
+ return VenvResolveResult(
562
+ venv=venv,
563
+ venv_distributions=tuple(venv_distributions),
564
+ re_resolved_distributions=tuple(fingerprinted_distributions),
565
+ direct_requirements_by_project_name=direct_requirements_by_project_name,
566
+ )
567
+
568
+
569
+ def resolve_from_venvs(
570
+ targets, # type: Targets
571
+ venvs, # type: Tuple[Virtualenv, ...]
572
+ requirement_configuration=RequirementConfiguration(), # type: RequirementConfiguration
573
+ pip_configuration=PipConfiguration(), # type: PipConfiguration
574
+ compile=False, # type: bool
575
+ ignore_errors=False, # type: bool
576
+ result_type=InstallableType.INSTALLED_WHEEL_CHROOT, # type: InstallableType.Value
577
+ dependency_configuration=DependencyConfiguration(), # type: DependencyConfiguration
578
+ ):
579
+ # type: (...) -> Union[ResolveResult, Error]
580
+
581
+ if not targets.is_empty:
582
+ return Error(
583
+ "You configured custom targets via --python, --interpreter-constraint, --platform or "
584
+ "--complete-platform but custom targets are not allowed when resolving from {venvs}.\n"
585
+ "For such resolves, the supported target is implicitly the one matching the venv "
586
+ "{interpreters}; in this case:{targets}.".format(
587
+ venvs="a virtual environment" if len(venvs) == 1 else "virtual environments",
588
+ interpreters=pluralize(venvs, "interpreter"),
589
+ targets=(
590
+ " {target}".format(
591
+ target=LocalInterpreter.create(venvs[0].interpreter).render_description()
592
+ )
593
+ if len(venvs) == 1
594
+ else "\n {targets}".format(
595
+ targets="\n ".join(
596
+ LocalInterpreter.create(venv.interpreter).render_description()
597
+ for venv in venvs
598
+ )
599
+ )
600
+ ),
601
+ )
602
+ )
603
+
604
+ errors = [] # type: List[Error]
605
+ venv_resolve_results = [] # type: List[VenvResolveResult]
606
+ for result in iter_map_parallel(
607
+ venvs,
608
+ functools.partial(
609
+ _resolve_from_venv,
610
+ requirement_configuration=requirement_configuration,
611
+ pip_configuration=pip_configuration,
612
+ compile=compile,
613
+ ignore_errors=ignore_errors,
614
+ result_type=result_type,
615
+ dependency_configuration=dependency_configuration,
616
+ ),
617
+ ):
618
+ if isinstance(result, Error):
619
+ errors.append(result)
620
+ else:
621
+ venv_resolve_results.append(result)
622
+
623
+ if len(errors) == 1:
624
+ return errors[0]
625
+ elif errors:
626
+ return Error(
627
+ "Failed to resolve from {count} of {total} virtual environments:\n{failures}".format(
628
+ count=len(errors),
629
+ total=len(venvs),
630
+ failures="\n".join(
631
+ "{index}. {error}".format(index=index, error=error)
632
+ for index, error in enumerate(errors, start=1)
633
+ ),
634
+ )
635
+ )
636
+
490
637
  return ResolveResult(
491
638
  dependency_configuration=dependency_configuration,
492
639
  distributions=tuple(
493
- ResolvedDistribution(
494
- target=target,
495
- fingerprinted_distribution=fingerprinted_distribution,
496
- direct_requirements=direct_requirements_by_project_name[
497
- fingerprinted_distribution.project_name
498
- ],
499
- )
500
- for fingerprinted_distribution in itertools.chain(
501
- list(
502
- _install_venv_distributions(
503
- venv=venv,
504
- distributions=venv_distributions,
505
- max_install_jobs=pip_configuration.max_jobs,
506
- result_type=result_type,
507
- use_system_time=True,
508
- )
509
- ),
510
- fingerprinted_distributions,
640
+ _install_venv_distributions(
641
+ venv_resolve_results,
642
+ max_install_jobs=pip_configuration.max_jobs,
643
+ result_type=result_type,
644
+ use_system_time=True,
511
645
  )
512
646
  ),
513
647
  type=result_type,
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.66.1"
4
+ __version__ = "2.67.1"
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pex
3
- Version: 2.66.1
3
+ Version: 2.67.1
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.66.1/pex
6
+ Download-URL: https://github.com/pex-tool/pex/releases/download/v2.67.1/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.66.1/CHANGES.md
10
+ Project-URL: Changelog, https://github.com/pex-tool/pex/blob/v2.67.1/CHANGES.md
11
11
  Project-URL: Documentation, https://docs.pex-tool.org/
12
- Project-URL: Source, https://github.com/pex-tool/pex/tree/v2.66.1
12
+ Project-URL: Source, https://github.com/pex-tool/pex/tree/v2.67.1
13
13
  Keywords: package,executable,virtualenv,lock,freeze
14
14
  Classifier: Development Status :: 5 - Production/Stable
15
15
  Classifier: Intended Audience :: Developers
@@ -13,7 +13,7 @@ pex/compatibility.py,sha256=v3y2THaiaYofZV0Bru6FwoM2OxDl03POkai1tQ245vY,10117
13
13
  pex/compiler.py,sha256=oDQ8env2V2Vo8KCXxQ6U7J9wxXB7y8vLazvDl_oJ8vo,3568
14
14
  pex/dependency_configuration.py,sha256=F-aFtAoODe69lmI8wE2KN1T_RYvEdOUxktg_mjp78Ko,9197
15
15
  pex/dependency_manager.py,sha256=DsqhgTGozNVUwStqcZR9WgJgjhZCzPp4wUa7PtbL8-M,4379
16
- pex/dist_metadata.py,sha256=mQgAq0S52PiOz0bMJ82n6k2shG5N0lzQnTc_92Vh3-k,48249
16
+ pex/dist_metadata.py,sha256=-aB5ZSSfQ-MQrDkoJTs9xAUB-MxeS8VfH6TY65kOBoQ,48262
17
17
  pex/entry_points_txt.py,sha256=9_RU4Zx1ybZDokV84FK9MRe_7MnytSEntD9v6njbnJg,3475
18
18
  pex/enum.py,sha256=kBW7RJLtef3pfltVpp0Uvs5uCpiXql_ncdKDn2In7vM,6174
19
19
  pex/environment.py,sha256=NBfoWjCfdqcHYMJixTItDm_dGymOVJrzws0BoV4oeow,36472
@@ -31,7 +31,7 @@ pex/installed_wheel.py,sha256=zPBq4AuXh4TsrtNU86bs1s3zc44YHckJp94y9oHZ_GE,5270
31
31
  pex/interpreter.py,sha256=Ka9QCoP3HL9xIJwW9f5YGvfWzc3kEWM0CuZ-7cWJSeE,63272
32
32
  pex/interpreter_constraints.py,sha256=K-6VhVXeUVrgO4OYWylNJKLX1H1esfyxFGDxpTbAl1M,14710
33
33
  pex/interpreter_implementation.py,sha256=OfatzBe4P-CqF4y9Jlwt-x41q7THspGexKyYPkma4w0,1137
34
- pex/jobs.py,sha256=1Ete5N2ezLNSpZjfx5pIRExYYgeIeMMKfSph977QkKs,28657
34
+ pex/jobs.py,sha256=OEcJ9iiyfz4g-XMXeIBeEwxD-FP_iZ6ChON81d1o6o4,28789
35
35
  pex/lang.py,sha256=Rhqq2EyYjCy1Ejg5wX0N5gZI0F0tIrxAgnlWSvf3dI4,1031
36
36
  pex/layout.py,sha256=_I2RjSF5wNQGmnUCwakPzUK-U140LtlP40EtQS6VyyQ,23961
37
37
  pex/network_configuration.py,sha256=Nim3wdAwpF4KmUgDcC-LEUPtJVurvm0bX0yTwnN8vVA,1900
@@ -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=_gB_Y2qiMFFWTwy40QRNGCesIljbAXfP239POnOHV7E,131
72
+ pex/version.py,sha256=HBC8Gd_iQL40pnxHTDcmKYZgP2DONF0-O_Jbbicw5lM,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=_BEqyjDMJ1-eV__8i0o2pSRDrKYRfV0KN2ltyopc-IQ,57407
117
- pex/docs/html/genindex.html,sha256=sJqSPZUP5H9nYwcbVMZzEMWMxExtCihn9xhWw9QoCVA,17198
118
- pex/docs/html/index.html,sha256=bpB-rWM8H0QOtjSWfwCEihpkYQxqJzjPxstcLcrYktk,25028
119
- pex/docs/html/recipes.html,sha256=63bLChF01jDJK-XULFmjnyAXz_Wu6D_xc9kCLNknAzE,35192
120
- pex/docs/html/scie.html,sha256=xIhrtVjKyHU1HdhHHryQZmQlXQohv4J70yXz7LO-6Gs,62182
121
- pex/docs/html/search.html,sha256=WLTpH0DUWkJ0jtru4KGotL3KQ-BtdAHiHZCoALBfghE,18169
116
+ pex/docs/html/buildingpex.html,sha256=cRF6fxOnrn-KZJ_tb7Qlamg6nNqU6mIsUiSDG5b9uo0,57407
117
+ pex/docs/html/genindex.html,sha256=E9n9yeC1POo19ijoQOL7Zzhr4eI7zgUEWV_NvxMXtPQ,17198
118
+ pex/docs/html/index.html,sha256=xJG8Tu1Ud-VGRXJHXAwrcS0iYrjxfqN5UKcZAyPWcF8,25028
119
+ pex/docs/html/recipes.html,sha256=NroFhFhWtvtB7xB-GkXmaodT5fM032gUdrXuHqjsKmQ,35192
120
+ pex/docs/html/scie.html,sha256=Vkqx9rOgQKwB2oN13MI2poENHXITjH1FVxMvwvvbGpw,62182
121
+ pex/docs/html/search.html,sha256=J6sXtJgFSWzM5QG9P7ULyoBK5nxn30ayd1DlaSP5nw0,18169
122
122
  pex/docs/html/searchindex.js,sha256=R_L6Oveik_wlK5CmaE7YwRvmu81r6fd7jtnZUjfk1sA,18009
123
- pex/docs/html/whatispex.html,sha256=wPb1hkFIVNXx16b26yFxmIr5FiKUR6uMd6wUwd9y6Gg,22754
124
- pex/docs/html/_pagefind/pagefind-entry.json,sha256=a6fU03bszaqB6QhxUcZ5wFQGHl3Im9aUuWlfKmnO8sk,90
123
+ pex/docs/html/whatispex.html,sha256=2qWIOnK1iaoTb6IkQAzyUg0CGjF8dCMieauF5Jc4PYo,22754
124
+ pex/docs/html/_pagefind/pagefind-entry.json,sha256=I2r5TWdZ_Cn-IgnhHyl8-tqqL-10F5UH0QWYYY9itFs,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_421bc6c608.pf_meta,sha256=tj_kX3x-bVIWnChlJvtW339dQazVvIzzi3cQxC2wkOM,155
130
+ pex/docs/html/_pagefind/pagefind.en_e36d294ae1.pf_meta,sha256=M1YS_UHk0Xeli5ZxznV-xdsAyjaHCV7bIVML04YzZyE,153
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_30a274f.pf_fragment,sha256=jCaLJvoPuopE9GcLXearB1pQUZ5xxsRWGYoMtlzkNbY,6820
135
- pex/docs/html/_pagefind/fragment/en_32bca6c.pf_fragment,sha256=WPdhaKRP8gqWHUZnGad6xGusYEdj7US5y6AG-5GSoZY,4847
136
- pex/docs/html/_pagefind/fragment/en_415e2ea.pf_fragment,sha256=vH1rphhFqU8kFn-H97WT0GUlzW0FxvJ6mzozJPro7To,1142
137
- pex/docs/html/_pagefind/fragment/en_bcccea1.pf_fragment,sha256=ZqYEHf8Iu6GL0CAYRbb6vs4GRQt05w7TcxIeeW3sB8c,3648
138
- pex/docs/html/_pagefind/fragment/en_ca898f2.pf_fragment,sha256=GW7k_RJeMLsmb-CT6EAFYiNdZ43tIt_EWQ3KodZHEJo,369
139
- pex/docs/html/_pagefind/fragment/en_d4c744d.pf_fragment,sha256=o7DcEKTsZE85Xda_veb2M0UXNKz_efAFQv6nI8-70cg,360
140
- pex/docs/html/_pagefind/fragment/en_f2ec11e.pf_fragment,sha256=bKQVKSWcZCyPrdF3hNu6l9YFlQRTnl_vZbICG6yji2o,3019
141
- pex/docs/html/_pagefind/fragment/en_f3e451d.pf_fragment,sha256=udb6sGnB8GWXcQGCstSSnabz94EWabJEy7XbdJywms0,1158
142
- pex/docs/html/_pagefind/index/en_5564892.pf_index,sha256=E8ZY-PzRXSZC9JImmTnQD30XF8npQJnebgabaj3W3eE,28865
134
+ pex/docs/html/_pagefind/fragment/en_119a8a8.pf_fragment,sha256=X47n9yEHgPKvrXTpI2eygKgpaao3XFI6WFXS3g9eyWo,4847
135
+ pex/docs/html/_pagefind/fragment/en_39d722b.pf_fragment,sha256=dWqTK8_CdN4Vr0v9voknT5-vEg0ITmVLUZqedQfWe-Q,1158
136
+ pex/docs/html/_pagefind/fragment/en_4d20267.pf_fragment,sha256=i8OYMf_AiI80-k0Ozu6rZIILtb_q0g5bV7RP0F3ZyaE,3019
137
+ pex/docs/html/_pagefind/fragment/en_513cb9b.pf_fragment,sha256=5B11JwyCW5rYi05EtudTJ50c6UC7i58APj9HSU0kAyQ,370
138
+ pex/docs/html/_pagefind/fragment/en_58fed73.pf_fragment,sha256=ureV1aF0Xk6OKys1sCzN5Px0bySWlp4_L04ffm89tgk,6821
139
+ pex/docs/html/_pagefind/fragment/en_889d8c7.pf_fragment,sha256=9ddzY3jd-rcsTI1LQKVs9vDLgNbpzC7ihw1d_ASvR0c,3648
140
+ pex/docs/html/_pagefind/fragment/en_cfaf4ce.pf_fragment,sha256=ttA8H1tuuBV_9dAj832DfaJ76Ch6bcVsAASs123L3fc,1142
141
+ pex/docs/html/_pagefind/fragment/en_ed9cf13.pf_fragment,sha256=fZ3x4h4l6GdzQkTlmUziNX2vXPlyhaIVLT66XMF4V_A,360
142
+ pex/docs/html/_pagefind/index/en_eeef12e.pf_index,sha256=rjAmO9_Jh410uNait6FK2msRqUxzOrYjSAXJ0etmk3o,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=0B99A6PGVTrk3wTy5g0QR4lI6IsHEPxG9EcoWTpC0QM,329
152
+ pex/docs/html/_static/documentation_options.js,sha256=xOF19IrCEj83yJgf5Xl5OEzFrKmGNuVNBgP23UI18zw,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=GRsy8AGhTnNpCgepmPNbvKwWtKG3bkFLaSint4xdrTE,34903
172
+ pex/docs/html/api/vars.html,sha256=UlO7OVXdnuOD82g2i33ka0ORYhYyvBs8GqaqcenwAKg,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
@@ -199,7 +199,7 @@ pex/repl/pex_repl.py,sha256=2jKrhzhZnGedHnbaZEyekt0jGKictqP4UmOipgM2Bu0,10020
199
199
  pex/resolve/__init__.py,sha256=uASB5OU996Jax-h3kMmeZjG5Jdy9BYDR6A1swkBoFDg,107
200
200
  pex/resolve/abbreviated_platforms.py,sha256=2CY6_AUIROeEBEsFn228MxY_IonQYknXotfSTypoRpM,7168
201
201
  pex/resolve/config.py,sha256=2urR5rvh6pY8tZzUfRdUVGYrAY1iXURp_N4lrnXIdJA,3362
202
- pex/resolve/configured_resolve.py,sha256=jd-lVJjXXtNlEbTlfaRpprETcDAywrpmm2Hpu0-T9ns,9617
202
+ pex/resolve/configured_resolve.py,sha256=HmzQuAKRF5Tf4oQmCK0DB8rOizylVn6IOvfn360E7n8,10059
203
203
  pex/resolve/configured_resolver.py,sha256=MRzp1hVHl7ooKHEhESN7oxMd5fOpxuXOGYiUXZe0Yww,3457
204
204
  pex/resolve/downloads.py,sha256=8R4GI-PSSLw2qv6XKsGyDFEiugfJgw2G6F4lywtU_Xk,7074
205
205
  pex/resolve/lock_downloader.py,sha256=wFWWPg1IWwLCAHN43ci28nqCrodmZM8mmKtMRW45O4M,15386
@@ -215,14 +215,14 @@ pex/resolve/project.py,sha256=BYy1m8-jUsiaBR1DF3eJiqpqvdqrzB-cQDPvcMD2v-0,14923
215
215
  pex/resolve/requirement_configuration.py,sha256=sHnf2OxhHEd3tiuaw8VTpE420TcpBv-EUnUeJ2iAWm4,3145
216
216
  pex/resolve/requirement_options.py,sha256=4E5e_81ANZMg3-a1zYnJ--rixyqaEJ49197GjB3AYbA,2288
217
217
  pex/resolve/resolved_requirement.py,sha256=78dn81rEqnbkbhR9C6rAh_rTfQTLq-zUaZZVh9Z7ZAQ,2480
218
- pex/resolve/resolver_configuration.py,sha256=H1yx6LoO1bZO5wAAVrC5kSNvwSK-el9brmIiPZSIMDY,9780
219
- pex/resolve/resolver_options.py,sha256=AYOcrnOdmJ2oxbUYfJbReFJTOanEKZW5Fk2qHf4d2Hg,43832
218
+ pex/resolve/resolver_configuration.py,sha256=CXJBxMGgAFUzQjcT25NSDL00He7kgyw2eGYqkQPjhFc,9793
219
+ pex/resolve/resolver_options.py,sha256=7EihW0PYLBSfYPfgSx4f0x3xHC_OkCJgTAD1bvlXXFg,44338
220
220
  pex/resolve/resolvers.py,sha256=0YFFukBDDTe0laT7at7wRMMbynaPzZhaZl55NgI1hS4,10156
221
221
  pex/resolve/script_metadata.py,sha256=6PdrBvUmKQGdTIPHfE-F07460drqjQB_HuBgz_35ql0,6903
222
222
  pex/resolve/target_configuration.py,sha256=FFrVHKgceCMlse2xOgxTtdnQ7ENw3A59t4IId0F1GDw,10349
223
223
  pex/resolve/target_options.py,sha256=6YoXvIWSyTKfkJ3fcEhqu7eDzF-TlUKhSoNlGoLApQI,12550
224
224
  pex/resolve/target_system.py,sha256=6omSogiX5cYlSGjPrAMQpP5MwhxBu4R8X0Mw6c6Jx_M,29905
225
- pex/resolve/venv_resolver.py,sha256=2TzcrBXz6FCWO30RMek4Coi81cy0QYPjcZgjN-TXWaE,20663
225
+ pex/resolve/venv_resolver.py,sha256=T1VffgkESq-hPDm11zj5wnefO47InmW2szlepUaDHeU,25359
226
226
  pex/resolve/lockfile/__init__.py,sha256=uASB5OU996Jax-h3kMmeZjG5Jdy9BYDR6A1swkBoFDg,107
227
227
  pex/resolve/lockfile/create.py,sha256=2ryGMtQTYTRQjIOACLFExqKa05LQZUkPx0qJcrTxPWU,33673
228
228
  pex/resolve/lockfile/download_manager.py,sha256=7mI_vUIIn4VxG3RDNxyT5yTpFLG9LH_IlGDKRMB_OJ0,9176
@@ -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.66.1.dist-info/METADATA,sha256=j--XxaXn3UU6Ii7ccq0Ra4mlaCQyc9GS8V7Acz9Rnm4,7476
989
- pex-2.66.1.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
990
- pex-2.66.1.dist-info/entry_points.txt,sha256=LD9tcxNxdsVLeIF6zR7dyH1vgo2eD9a-05TC1UraGMQ,174
991
- pex-2.66.1.dist-info/top_level.txt,sha256=HlafJUPu7mfjxv3SDH-RbkxsHOWSVbPXTEBC1hzonpM,4
992
- pex-2.66.1.dist-info/licenses/LICENSE,sha256=bcDgaNzzpbyOBUIFuFt3IOHUkmW7xkv1FdLPeRl99po,11323
993
- pex-2.66.1.dist-info/pylock/pylock.toml,sha256=9TIk5X6BqnJ6lKu8eb0EnzwbBcOjs3QJWzcLMYx8M5k,7151
994
- pex-2.66.1.dist-info/RECORD,,
988
+ pex-2.67.1.dist-info/METADATA,sha256=DDhyJQcZuP10WtBdggsWhiVoGAXi3DXFnhhHtrEO5nw,7476
989
+ pex-2.67.1.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
990
+ pex-2.67.1.dist-info/entry_points.txt,sha256=LD9tcxNxdsVLeIF6zR7dyH1vgo2eD9a-05TC1UraGMQ,174
991
+ pex-2.67.1.dist-info/top_level.txt,sha256=HlafJUPu7mfjxv3SDH-RbkxsHOWSVbPXTEBC1hzonpM,4
992
+ pex-2.67.1.dist-info/licenses/LICENSE,sha256=bcDgaNzzpbyOBUIFuFt3IOHUkmW7xkv1FdLPeRl99po,11323
993
+ pex-2.67.1.dist-info/pylock/pylock.toml,sha256=9TIk5X6BqnJ6lKu8eb0EnzwbBcOjs3QJWzcLMYx8M5k,7151
994
+ pex-2.67.1.dist-info/RECORD,,
File without changes