pex 2.59.5__py2.py3-none-any.whl → 2.60.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pex might be problematic. Click here for more details.
- pex/cache/dirs.py +14 -4
- pex/cli/commands/lock.py +8 -5
- pex/common.py +57 -7
- pex/dist_metadata.py +48 -6
- pex/docs/html/_pagefind/fragment/en_39c0488.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_3eeaaf4.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_a1dde36.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_a755644.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_b16e3bd.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/{en_ecf679c.pf_fragment → en_c5d35a7.pf_fragment} +0 -0
- pex/docs/html/_pagefind/fragment/en_ec62bd2.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_f32628f.pf_fragment +0 -0
- pex/docs/html/_pagefind/index/{en_974dc5a.pf_index → en_b211695.pf_index} +0 -0
- pex/docs/html/_pagefind/pagefind-entry.json +1 -1
- pex/docs/html/_pagefind/pagefind.en_e8a49380e5.pf_meta +0 -0
- pex/docs/html/_static/documentation_options.js +1 -1
- pex/docs/html/api/vars.html +5 -5
- pex/docs/html/buildingpex.html +5 -5
- pex/docs/html/genindex.html +5 -5
- pex/docs/html/index.html +5 -5
- pex/docs/html/recipes.html +5 -5
- pex/docs/html/scie.html +5 -5
- pex/docs/html/search.html +5 -5
- pex/docs/html/whatispex.html +5 -5
- pex/entry_points_txt.py +98 -0
- pex/environment.py +13 -10
- pex/finders.py +1 -1
- pex/installed_wheel.py +127 -0
- pex/interpreter.py +17 -5
- pex/interpreter_constraints.py +4 -4
- pex/pep_376.py +20 -380
- pex/pep_427.py +736 -248
- pex/pex_builder.py +4 -4
- pex/pex_info.py +8 -3
- pex/resolve/venv_resolver.py +46 -25
- pex/resolver.py +10 -3
- pex/sysconfig.py +5 -3
- pex/third_party/__init__.py +1 -1
- pex/tools/commands/repository.py +47 -24
- pex/vendor/__init__.py +1 -8
- pex/vendor/__main__.py +62 -41
- pex/vendor/_vendored/ansicolors/.layout.json +1 -1
- pex/vendor/_vendored/ansicolors/ansicolors-1.1.8.dist-info/RECORD +11 -0
- pex/vendor/_vendored/ansicolors/ansicolors-1.1.8.pex-info/original-whl-info.json +1 -0
- pex/vendor/_vendored/appdirs/.layout.json +1 -1
- pex/vendor/_vendored/appdirs/appdirs-1.4.4.dist-info/RECORD +7 -0
- pex/vendor/_vendored/appdirs/appdirs-1.4.4.pex-info/original-whl-info.json +1 -0
- pex/vendor/_vendored/attrs/.layout.json +1 -1
- pex/vendor/_vendored/attrs/attrs-21.5.0.dev0.dist-info/RECORD +37 -0
- pex/vendor/_vendored/attrs/attrs-21.5.0.dev0.pex-info/original-whl-info.json +1 -0
- pex/vendor/_vendored/packaging_20_9/.layout.json +1 -1
- pex/vendor/_vendored/packaging_20_9/packaging-20.9.dist-info/RECORD +20 -0
- pex/vendor/_vendored/packaging_20_9/packaging-20.9.pex-info/original-whl-info.json +1 -0
- pex/vendor/_vendored/packaging_20_9/pyparsing-2.4.7.dist-info/RECORD +7 -0
- pex/vendor/_vendored/packaging_20_9/pyparsing-2.4.7.pex-info/original-whl-info.json +1 -0
- pex/vendor/_vendored/packaging_21_3/.layout.json +1 -1
- pex/vendor/_vendored/packaging_21_3/packaging-21.3.dist-info/RECORD +20 -0
- pex/vendor/_vendored/packaging_21_3/packaging-21.3.pex-info/original-whl-info.json +1 -0
- pex/vendor/_vendored/packaging_21_3/pyparsing-3.0.7.dist-info/RECORD +18 -0
- pex/vendor/_vendored/packaging_21_3/pyparsing-3.0.7.pex-info/original-whl-info.json +1 -0
- pex/vendor/_vendored/packaging_24_0/.layout.json +1 -1
- pex/vendor/_vendored/packaging_24_0/packaging-24.0.dist-info/RECORD +22 -0
- pex/vendor/_vendored/packaging_24_0/packaging-24.0.pex-info/original-whl-info.json +1 -0
- pex/vendor/_vendored/packaging_25_0/.layout.json +1 -1
- pex/vendor/_vendored/packaging_25_0/packaging-25.0.dist-info/RECORD +24 -0
- pex/vendor/_vendored/packaging_25_0/packaging-25.0.pex-info/original-whl-info.json +1 -0
- pex/vendor/_vendored/pip/.layout.json +1 -1
- pex/vendor/_vendored/pip/pip-20.3.4.dist-info/RECORD +388 -0
- pex/vendor/_vendored/pip/pip-20.3.4.pex-info/original-whl-info.json +1 -0
- pex/vendor/_vendored/setuptools/.layout.json +1 -1
- pex/vendor/_vendored/setuptools/setuptools-44.0.0+3acb925dd708430aeaf197ea53ac8a752f7c1863.dist-info/RECORD +107 -0
- pex/vendor/_vendored/setuptools/setuptools-44.0.0+3acb925dd708430aeaf197ea53ac8a752f7c1863.pex-info/original-whl-info.json +1 -0
- pex/vendor/_vendored/toml/.layout.json +1 -1
- pex/vendor/_vendored/toml/toml-0.10.2.dist-info/RECORD +11 -0
- pex/vendor/_vendored/toml/toml-0.10.2.pex-info/original-whl-info.json +1 -0
- pex/vendor/_vendored/tomli/.layout.json +1 -1
- pex/vendor/_vendored/tomli/tomli-2.0.1.dist-info/RECORD +10 -0
- pex/vendor/_vendored/tomli/tomli-2.0.1.pex-info/original-whl-info.json +1 -0
- pex/venv/installer.py +9 -5
- pex/version.py +1 -1
- pex/wheel.py +79 -15
- pex/whl.py +67 -0
- pex/windows/__init__.py +14 -11
- {pex-2.59.5.dist-info → pex-2.60.0.dist-info}/METADATA +4 -4
- {pex-2.59.5.dist-info → pex-2.60.0.dist-info}/RECORD +90 -74
- pex/docs/html/_pagefind/fragment/en_34b3bf8.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_3cefc8e.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_44ba8a7.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_8eb9a56.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_db171fd.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_fb971c7.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_fd8f242.pf_fragment +0 -0
- pex/docs/html/_pagefind/pagefind.en_3549188bce.pf_meta +0 -0
- pex/vendor/_vendored/ansicolors/ansicolors-1.1.8.dist-info/INSTALLER +0 -1
- pex/vendor/_vendored/appdirs/appdirs-1.4.4.dist-info/INSTALLER +0 -1
- pex/vendor/_vendored/attrs/attrs-21.5.0.dev0.dist-info/INSTALLER +0 -1
- pex/vendor/_vendored/packaging_20_9/packaging-20.9.dist-info/INSTALLER +0 -1
- pex/vendor/_vendored/packaging_20_9/pyparsing-2.4.7.dist-info/INSTALLER +0 -1
- pex/vendor/_vendored/packaging_21_3/packaging-21.3.dist-info/INSTALLER +0 -1
- pex/vendor/_vendored/packaging_21_3/pyparsing-3.0.7.dist-info/INSTALLER +0 -1
- pex/vendor/_vendored/packaging_24_0/packaging-24.0.dist-info/INSTALLER +0 -1
- pex/vendor/_vendored/packaging_25_0/packaging-25.0.dist-info/INSTALLER +0 -1
- pex/vendor/_vendored/pip/pip-20.3.4.dist-info/INSTALLER +0 -1
- pex/vendor/_vendored/setuptools/setuptools-44.0.0+3acb925dd708430aeaf197ea53ac8a752f7c1863.dist-info/INSTALLER +0 -1
- pex/vendor/_vendored/toml/toml-0.10.2.dist-info/INSTALLER +0 -1
- pex/vendor/_vendored/tomli/tomli-2.0.1.dist-info/INSTALLER +0 -1
- {pex-2.59.5.dist-info → pex-2.60.0.dist-info}/WHEEL +0 -0
- {pex-2.59.5.dist-info → pex-2.60.0.dist-info}/entry_points.txt +0 -0
- {pex-2.59.5.dist-info → pex-2.60.0.dist-info}/licenses/LICENSE +0 -0
- {pex-2.59.5.dist-info → pex-2.60.0.dist-info}/pylock/pylock.toml +0 -0
- {pex-2.59.5.dist-info → pex-2.60.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"entries":[["easy_install.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/__init__.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/py31compat.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/__init__.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/appdirs.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/pyparsing.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/six.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/packaging/__about__.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/packaging/__init__.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/packaging/_compat.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/packaging/_structures.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/packaging/markers.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/packaging/requirements.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/packaging/specifiers.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/packaging/utils.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/_vendor/packaging/version.py",[1980,1,1,0,0,0],2175008768],["pkg_resources/extern/__init__.py",[1980,1,1,0,0,0],2175008768],["setuptools/__init__.py",[1980,1,1,0,0,0],2175008768],["setuptools/_deprecation_warning.py",[1980,1,1,0,0,0],2175008768],["setuptools/_imp.py",[1980,1,1,0,0,0],2175008768],["setuptools/archive_util.py",[1980,1,1,0,0,0],2175008768],["setuptools/build_meta.py",[1980,1,1,0,0,0],2175008768],["setuptools/cli-32.exe",[1980,1,1,0,0,0],2175008768],["setuptools/cli-64.exe",[1980,1,1,0,0,0],2175008768],["setuptools/cli.exe",[1980,1,1,0,0,0],2175008768],["setuptools/config.py",[1980,1,1,0,0,0],2175008768],["setuptools/dep_util.py",[1980,1,1,0,0,0],2175008768],["setuptools/depends.py",[1980,1,1,0,0,0],2175008768],["setuptools/dist.py",[1980,1,1,0,0,0],2175008768],["setuptools/errors.py",[1980,1,1,0,0,0],2175008768],["setuptools/extension.py",[1980,1,1,0,0,0],2175008768],["setuptools/glob.py",[1980,1,1,0,0,0],2175008768],["setuptools/gui-32.exe",[1980,1,1,0,0,0],2175008768],["setuptools/gui-64.exe",[1980,1,1,0,0,0],2175008768],["setuptools/gui.exe",[1980,1,1,0,0,0],2175008768],["setuptools/installer.py",[1980,1,1,0,0,0],2175008768],["setuptools/launch.py",[1980,1,1,0,0,0],2175008768],["setuptools/lib2to3_ex.py",[1980,1,1,0,0,0],2175008768],["setuptools/monkey.py",[1980,1,1,0,0,0],2175008768],["setuptools/msvc.py",[1980,1,1,0,0,0],2175008768],["setuptools/namespaces.py",[1980,1,1,0,0,0],2175008768],["setuptools/package_index.py",[1980,1,1,0,0,0],2175008768],["setuptools/py27compat.py",[1980,1,1,0,0,0],2175008768],["setuptools/py31compat.py",[1980,1,1,0,0,0],2175008768],["setuptools/py33compat.py",[1980,1,1,0,0,0],2175008768],["setuptools/py34compat.py",[1980,1,1,0,0,0],2175008768],["setuptools/sandbox.py",[1980,1,1,0,0,0],2175008768],["setuptools/script (dev).tmpl",[1980,1,1,0,0,0],2175008768],["setuptools/script.tmpl",[1980,1,1,0,0,0],2175008768],["setuptools/site-patch.py",[1980,1,1,0,0,0],2175008768],["setuptools/ssl_support.py",[1980,1,1,0,0,0],2175008768],["setuptools/unicode_utils.py",[1980,1,1,0,0,0],2175008768],["setuptools/version.py",[1980,1,1,0,0,0],2175008768],["setuptools/wheel.py",[1980,1,1,0,0,0],2175008768],["setuptools/windows_support.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/__init__.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/ordered_set.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/pyparsing.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/six.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/packaging/__about__.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/packaging/__init__.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/packaging/_compat.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/packaging/_structures.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/packaging/markers.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/packaging/requirements.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/packaging/specifiers.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/packaging/tags.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/packaging/utils.py",[1980,1,1,0,0,0],2175008768],["setuptools/_vendor/packaging/version.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/__init__.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/alias.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/bdist_egg.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/bdist_rpm.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/bdist_wininst.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/build_clib.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/build_ext.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/build_py.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/develop.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/dist_info.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/easy_install.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/egg_info.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/install.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/install_egg_info.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/install_lib.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/install_scripts.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/launcher manifest.xml",[1980,1,1,0,0,0],2175008768],["setuptools/command/py36compat.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/register.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/rotate.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/saveopts.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/sdist.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/setopt.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/test.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/upload.py",[1980,1,1,0,0,0],2175008768],["setuptools/command/upload_docs.py",[1980,1,1,0,0,0],2175008768],["setuptools/extern/__init__.py",[1980,1,1,0,0,0],2175008768],["setuptools-44.0.0+3acb925dd708430aeaf197ea53ac8a752f7c1863.dist-info/LICENSE",[1980,1,1,0,0,0],2175008768],["setuptools-44.0.0+3acb925dd708430aeaf197ea53ac8a752f7c1863.dist-info/METADATA",[1980,1,1,0,0,0],2175008768],["setuptools-44.0.0+3acb925dd708430aeaf197ea53ac8a752f7c1863.dist-info/WHEEL",[1980,1,1,0,0,0],2175008768],["setuptools-44.0.0+3acb925dd708430aeaf197ea53ac8a752f7c1863.dist-info/dependency_links.txt",[1980,1,1,0,0,0],2175008768],["setuptools-44.0.0+3acb925dd708430aeaf197ea53ac8a752f7c1863.dist-info/entry_points.txt",[1980,1,1,0,0,0],2175008768],["setuptools-44.0.0+3acb925dd708430aeaf197ea53ac8a752f7c1863.dist-info/top_level.txt",[1980,1,1,0,0,0],2175008768],["setuptools-44.0.0+3acb925dd708430aeaf197ea53ac8a752f7c1863.dist-info/zip-safe",[1980,1,1,0,0,0],2175008768],["setuptools-44.0.0+3acb925dd708430aeaf197ea53ac8a752f7c1863.dist-info/RECORD",[1980,1,1,0,0,0],28573696]],"filename":"setuptools-44.0.0+3acb925dd708430aeaf197ea53ac8a752f7c1863-py2.py3-none-any.whl"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fingerprint":
|
|
1
|
+
{"fingerprint":"e022215e30b009ca1018a9255f6812d150469e3f6ff12687dd93459dd5a5274d","record_relpath":"toml-0.10.2.dist-info/RECORD","root_is_purelib":true,"stash_dir":".prefix"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
toml/__init__.py,sha256=OAi77F_oThE00nGyd1z7JgtG_PKq6XKQxLfThnETzcU,1003
|
|
2
|
+
toml/decoder.py,sha256=NT-RGTEh0vBksVd2WaYorMu5-K350_ymWiDggVUXefM,39084
|
|
3
|
+
toml/encoder.py,sha256=KWnqyK3VROUobm8d3dOKckXMEh4d_yOQGPWvPNCj5xI,10273
|
|
4
|
+
toml/ordered.py,sha256=-0iAss5NfnsyIjhzsyjtztFiCgVINlW7dGXmgdBcLvA,642
|
|
5
|
+
toml/tz.py,sha256=-5vg8wkg_atnVi2TnEveexIVE7T_FxBVr_-2WVfO1oA,701
|
|
6
|
+
toml-0.10.2.dist-info/LICENSE,sha256=LZKUgj32yJNXyL5JJ_znk2HWVh5e51MtWSbmOTmqpTY,1252
|
|
7
|
+
toml-0.10.2.dist-info/METADATA,sha256=n_YkspvEihd_QXLIZZ50WVSFz3rZ_k7jQP-OU1WUpWY,7142
|
|
8
|
+
toml-0.10.2.dist-info/WHEEL,sha256=ADKeyaGyKF5DwBNE0sRE5pvW-bSkFMJfBuhzZ3rceP4,110
|
|
9
|
+
toml-0.10.2.dist-info/top_level.txt,sha256=2BO8ZRNnvJWgXyiQv66LBb_v87qBzcoUtEBefA75Ouk,5
|
|
10
|
+
toml-0.10.2.dist-info/RECORD,,
|
|
11
|
+
toml-0.10.2.pex-info/original-whl-info.json,sha256=63hjg_RvL2dX1x8O7tNS3P_oW9o1e5CHUfZ0MIyKehM,636
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"entries":[["toml/__init__.py",[2020,11,1,1,37,2],2175008768],["toml/decoder.py",[2020,10,31,3,20,8],2175008768],["toml/encoder.py",[2020,10,31,3,20,8],2175008768],["toml/ordered.py",[2018,4,1,16,33,32],2175008768],["toml/tz.py",[2020,10,31,3,20,8],2175008768],["toml-0.10.2.dist-info/LICENSE",[2020,11,1,1,37,14],2175008768],["toml-0.10.2.dist-info/METADATA",[2020,11,1,1,37,14],2175008768],["toml-0.10.2.dist-info/WHEEL",[2020,11,1,1,37,14],2175008768],["toml-0.10.2.dist-info/top_level.txt",[2020,11,1,1,37,14],2175008768],["toml-0.10.2.dist-info/RECORD",[2020,11,1,1,37,14],28573696]],"filename":"toml-0.10.2-py2.py3-none-any.whl"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fingerprint":
|
|
1
|
+
{"fingerprint":"bbe9219bfe424168417563a7c481eeed73fbb39ef7458e0e8ba636276afb2822","record_relpath":"tomli-2.0.1.dist-info/RECORD","root_is_purelib":true,"stash_dir":".prefix"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
tomli/__init__.py,sha256=JhUwV66DB1g4Hvt1UQCVMdfCu-IgAV8FXmvDU9onxd4,396
|
|
2
|
+
tomli/_parser.py,sha256=g9-ENaALS-B8dokYpCuzUFalWlog7T-SIYMjLZSWrtM,22633
|
|
3
|
+
tomli/_re.py,sha256=dbjg5ChZT23Ka9z9DHOXfdtSpPwUfdgMXnj8NOoly-w,2943
|
|
4
|
+
tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254
|
|
5
|
+
tomli/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26
|
|
6
|
+
tomli-2.0.1.dist-info/LICENSE,sha256=uAgWsNUwuKzLTCIReDeQmEpuO2GSLCte6S8zcqsnQv4,1072
|
|
7
|
+
tomli-2.0.1.dist-info/WHEEL,sha256=jPMR_Dzkc4X4icQtmz81lnNY_kAsfog7ry7qoRvYLXw,81
|
|
8
|
+
tomli-2.0.1.dist-info/METADATA,sha256=zPDceKmPwJGLWtZykrHixL7WVXWmJGzZ1jyRT5lCoPI,8875
|
|
9
|
+
tomli-2.0.1.dist-info/RECORD,,
|
|
10
|
+
tomli-2.0.1.pex-info/original-whl-info.json,sha256=_Iy0aZfe20sZ7ZM6ou1a246HfctfLCZeq4YrNIc7k_I,552
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"entries":[["tomli/__init__.py",[2022,2,8,10,53,42],2175008768],["tomli/_parser.py",[2022,2,8,10,53,42],2175008768],["tomli/_re.py",[2022,2,8,10,53,42],2175008768],["tomli/_types.py",[2022,2,8,10,53,42],2175008768],["tomli/py.typed",[2022,2,8,10,53,42],2175008768],["tomli-2.0.1.dist-info/LICENSE",[2022,2,8,10,53,42],2175008768],["tomli-2.0.1.dist-info/WHEEL",[2016,1,1,0,0,0],27525120],["tomli-2.0.1.dist-info/METADATA",[2016,1,1,0,0,0],27525120],["tomli-2.0.1.dist-info/RECORD",[2016,1,1,0,0,0],27525120]],"filename":"tomli-2.0.1-py3-none-any.whl"}
|
pex/venv/installer.py
CHANGED
|
@@ -17,9 +17,10 @@ from pex.dist_metadata import Distribution
|
|
|
17
17
|
from pex.environment import PEXEnvironment
|
|
18
18
|
from pex.executables import chmod_plus_x
|
|
19
19
|
from pex.fs import safe_symlink
|
|
20
|
+
from pex.installed_wheel import InstalledWheel
|
|
20
21
|
from pex.orderedset import OrderedSet
|
|
21
22
|
from pex.os import WINDOWS
|
|
22
|
-
from pex.
|
|
23
|
+
from pex.pep_427 import reinstall_flat, reinstall_venv
|
|
23
24
|
from pex.pep_440 import Version
|
|
24
25
|
from pex.pep_503 import ProjectName
|
|
25
26
|
from pex.pex import PEX
|
|
@@ -268,8 +269,8 @@ def _populate_flat_deps(
|
|
|
268
269
|
for dist in distributions:
|
|
269
270
|
try:
|
|
270
271
|
installed_wheel = InstalledWheel.load(dist.location)
|
|
271
|
-
for src, dst in
|
|
272
|
-
target_dir=dest_dir, copy_mode=copy_mode
|
|
272
|
+
for src, dst in reinstall_flat(
|
|
273
|
+
installed_wheel=installed_wheel, target_dir=dest_dir, copy_mode=copy_mode
|
|
273
274
|
):
|
|
274
275
|
yield src, dst
|
|
275
276
|
except InstalledWheel.LoadError:
|
|
@@ -482,8 +483,11 @@ def _populate_venv_deps(
|
|
|
482
483
|
|
|
483
484
|
try:
|
|
484
485
|
installed_wheel = InstalledWheel.load(dist.location)
|
|
485
|
-
for src, dst in
|
|
486
|
-
|
|
486
|
+
for src, dst in reinstall_venv(
|
|
487
|
+
installed_wheel=installed_wheel,
|
|
488
|
+
venv=venv,
|
|
489
|
+
copy_mode=copy_mode,
|
|
490
|
+
rel_extra_path=rel_extra_path,
|
|
487
491
|
):
|
|
488
492
|
yield src, dst
|
|
489
493
|
except InstalledWheel.LoadError:
|
pex/version.py
CHANGED
pex/wheel.py
CHANGED
|
@@ -17,11 +17,13 @@ from pex.dist_metadata import (
|
|
|
17
17
|
parse_message,
|
|
18
18
|
)
|
|
19
19
|
from pex.orderedset import OrderedSet
|
|
20
|
+
from pex.pep_440 import Version
|
|
21
|
+
from pex.pep_503 import ProjectName
|
|
20
22
|
from pex.third_party.packaging import tags
|
|
21
23
|
from pex.typing import TYPE_CHECKING, cast
|
|
22
24
|
|
|
23
25
|
if TYPE_CHECKING:
|
|
24
|
-
from typing import Dict, Optional, Text, Tuple
|
|
26
|
+
from typing import Dict, Iterator, List, Optional, Text, Tuple
|
|
25
27
|
|
|
26
28
|
import attr # vendor:skip
|
|
27
29
|
else:
|
|
@@ -53,30 +55,37 @@ class WHEEL(object):
|
|
|
53
55
|
metadata = parse_message(metadata_bytes)
|
|
54
56
|
return cls(files=metadata_files, metadata=metadata)
|
|
55
57
|
|
|
56
|
-
_CACHE = {} # type: Dict[Text, WHEEL]
|
|
58
|
+
_CACHE = {} # type: Dict[Tuple[Text, Optional[ProjectName]], WHEEL]
|
|
57
59
|
|
|
58
60
|
@classmethod
|
|
59
|
-
def load(
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
def load(
|
|
62
|
+
cls,
|
|
63
|
+
location, # type: Text
|
|
64
|
+
project_name=None, # type: Optional[ProjectName]
|
|
65
|
+
):
|
|
66
|
+
# type: (...) -> WHEEL
|
|
67
|
+
wheel = cls._CACHE.get((location, project_name))
|
|
62
68
|
if not wheel:
|
|
63
|
-
metadata_files = load_metadata(
|
|
69
|
+
metadata_files = load_metadata(
|
|
70
|
+
location, project_name=project_name, restrict_types_to=(MetadataType.DIST_INFO,)
|
|
71
|
+
)
|
|
64
72
|
if not metadata_files:
|
|
65
73
|
raise WheelMetadataLoadError(
|
|
66
74
|
"Could not find any metadata in {wheel}.".format(wheel=location)
|
|
67
75
|
)
|
|
68
76
|
wheel = cls._from_metadata_files(metadata_files)
|
|
69
|
-
cls._CACHE[location] = wheel
|
|
77
|
+
cls._CACHE[(location, project_name)] = wheel
|
|
70
78
|
return wheel
|
|
71
79
|
|
|
72
80
|
@classmethod
|
|
73
81
|
def from_distribution(cls, distribution):
|
|
74
82
|
# type: (Distribution) -> WHEEL
|
|
75
83
|
location = distribution.metadata.files.metadata.path
|
|
76
|
-
|
|
84
|
+
project_name = distribution.metadata.project_name
|
|
85
|
+
wheel = cls._CACHE.get((location, project_name))
|
|
77
86
|
if not wheel:
|
|
78
87
|
wheel = cls._from_metadata_files(distribution.metadata.files)
|
|
79
|
-
cls._CACHE[location] = wheel
|
|
88
|
+
cls._CACHE[(location, project_name)] = wheel
|
|
80
89
|
return wheel
|
|
81
90
|
|
|
82
91
|
files = attr.ib() # type: MetadataFiles
|
|
@@ -163,6 +172,7 @@ class Wheel(object):
|
|
|
163
172
|
metadata_dir = str(wheel_metadata_dir)
|
|
164
173
|
|
|
165
174
|
data_dir = re.sub(r"\.dist-info$", ".data", metadata_dir)
|
|
175
|
+
pex_metadata_dir = re.sub(r"\.dist-info$", ".pex-info", metadata_dir)
|
|
166
176
|
|
|
167
177
|
return cls(
|
|
168
178
|
location=location,
|
|
@@ -170,13 +180,18 @@ class Wheel(object):
|
|
|
170
180
|
metadata_files=metadata_files,
|
|
171
181
|
metadata=metadata,
|
|
172
182
|
data_dir=data_dir,
|
|
183
|
+
pex_metadata_dir=pex_metadata_dir,
|
|
173
184
|
)
|
|
174
185
|
|
|
175
186
|
@classmethod
|
|
176
|
-
def load(
|
|
177
|
-
|
|
187
|
+
def load(
|
|
188
|
+
cls,
|
|
189
|
+
wheel_path, # type: str
|
|
190
|
+
project_name=None, # type: Optional[ProjectName]
|
|
191
|
+
):
|
|
192
|
+
# type: (...) -> Wheel
|
|
178
193
|
|
|
179
|
-
wheel = WHEEL.load(wheel_path)
|
|
194
|
+
wheel = WHEEL.load(wheel_path, project_name=project_name)
|
|
180
195
|
return cls._from_metadata_files(
|
|
181
196
|
location=wheel_path, metadata_files=wheel.files, wheel=wheel
|
|
182
197
|
)
|
|
@@ -193,12 +208,23 @@ class Wheel(object):
|
|
|
193
208
|
metadata_files = attr.ib() # type: MetadataFiles
|
|
194
209
|
metadata = attr.ib() # type: WHEEL
|
|
195
210
|
data_dir = attr.ib() # type: str
|
|
211
|
+
pex_metadata_dir = attr.ib() # type: str
|
|
196
212
|
|
|
197
213
|
@property
|
|
198
214
|
def source(self):
|
|
199
215
|
# type: () -> str
|
|
200
216
|
return self._source(self.location, self.metadata_files)
|
|
201
217
|
|
|
218
|
+
@property
|
|
219
|
+
def project_name(self):
|
|
220
|
+
# type: () -> ProjectName
|
|
221
|
+
return self.metadata_files.metadata.project_name
|
|
222
|
+
|
|
223
|
+
@property
|
|
224
|
+
def version(self):
|
|
225
|
+
# type: () -> Version
|
|
226
|
+
return self.metadata_files.metadata.version
|
|
227
|
+
|
|
202
228
|
@property
|
|
203
229
|
def wheel_file_name(self):
|
|
204
230
|
# type: () -> str
|
|
@@ -215,11 +241,31 @@ class Wheel(object):
|
|
|
215
241
|
)
|
|
216
242
|
|
|
217
243
|
return "{project_name}-{version}-{tag}.whl".format(
|
|
218
|
-
project_name=self.
|
|
219
|
-
version=self.metadata_files.metadata.version.raw,
|
|
220
|
-
tag=tag,
|
|
244
|
+
project_name=self.project_name.raw, version=self.version.raw, tag=tag
|
|
221
245
|
)
|
|
222
246
|
|
|
247
|
+
def iter_compatible_python_versions(self):
|
|
248
|
+
# type: () -> Iterator[Tuple[int, ...]]
|
|
249
|
+
|
|
250
|
+
for tag in self.metadata.tags:
|
|
251
|
+
match = re.search(r"\d+(?:_\d+)*", tag.interpreter)
|
|
252
|
+
if not match:
|
|
253
|
+
raise WheelMetadataLoadError(
|
|
254
|
+
"Invalid interpreter tag for wheel {whl} at {location}: {tag}".format(
|
|
255
|
+
whl=self.wheel_file_name, location=self.location, tag=tag.interpreter
|
|
256
|
+
)
|
|
257
|
+
)
|
|
258
|
+
components = match.group().split("_")
|
|
259
|
+
version = [] # type: List[int]
|
|
260
|
+
if len(components) == 1:
|
|
261
|
+
py_version_nodot = components[0]
|
|
262
|
+
version.append(int(py_version_nodot[0]))
|
|
263
|
+
if len(py_version_nodot) > 1:
|
|
264
|
+
version.append(int(py_version_nodot[1:]))
|
|
265
|
+
else:
|
|
266
|
+
version.extend(int(component) for component in components)
|
|
267
|
+
yield tuple(version)
|
|
268
|
+
|
|
223
269
|
@property
|
|
224
270
|
def root_is_purelib(self):
|
|
225
271
|
# type: () -> bool
|
|
@@ -231,8 +277,26 @@ class Wheel(object):
|
|
|
231
277
|
|
|
232
278
|
def metadata_path(self, *components):
|
|
233
279
|
# type: (*str) -> str
|
|
280
|
+
if not components:
|
|
281
|
+
return self.metadata_dir
|
|
234
282
|
return os.path.join(self.metadata_dir, *components)
|
|
235
283
|
|
|
236
284
|
def data_path(self, *components):
|
|
237
285
|
# type: (*str) -> str
|
|
238
286
|
return os.path.join(self.data_dir, *components)
|
|
287
|
+
|
|
288
|
+
def pex_metadata_path(self, *components):
|
|
289
|
+
# type: (*str) -> str
|
|
290
|
+
if not components:
|
|
291
|
+
return self.pex_metadata_dir
|
|
292
|
+
return os.path.join(self.pex_metadata_dir, *components)
|
|
293
|
+
|
|
294
|
+
def read_pex_metadata(self, *components):
|
|
295
|
+
# type: (*str) -> Optional[bytes]
|
|
296
|
+
|
|
297
|
+
location = os.path.join(self.location, self.pex_metadata_path(*components))
|
|
298
|
+
if not os.path.exists(location):
|
|
299
|
+
return None
|
|
300
|
+
|
|
301
|
+
with open(location, "rb") as fp:
|
|
302
|
+
return fp.read()
|
pex/whl.py
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Copyright 2025 Pex project contributors.
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (see LICENSE).
|
|
3
|
+
|
|
4
|
+
from __future__ import absolute_import
|
|
5
|
+
|
|
6
|
+
import hashlib
|
|
7
|
+
import os
|
|
8
|
+
|
|
9
|
+
from pex.atomic_directory import atomic_directory
|
|
10
|
+
from pex.cache.dirs import CacheDir
|
|
11
|
+
from pex.dist_metadata import Distribution
|
|
12
|
+
from pex.fingerprinted_distribution import FingerprintedDistribution
|
|
13
|
+
from pex.installed_wheel import InstalledWheel
|
|
14
|
+
from pex.pep_427 import repack
|
|
15
|
+
from pex.typing import TYPE_CHECKING
|
|
16
|
+
from pex.util import CacheHelper
|
|
17
|
+
|
|
18
|
+
if TYPE_CHECKING:
|
|
19
|
+
from typing import Optional, Union
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def repacked_whl(
|
|
23
|
+
installed_wheel, # type: Union[str, InstalledWheel]
|
|
24
|
+
fingerprint, # type: str
|
|
25
|
+
distribution_name=None, # type: Optional[str]
|
|
26
|
+
use_system_time=False, # type: bool
|
|
27
|
+
):
|
|
28
|
+
# type: (...) -> FingerprintedDistribution
|
|
29
|
+
|
|
30
|
+
installed_wheel = (
|
|
31
|
+
installed_wheel
|
|
32
|
+
if isinstance(installed_wheel, InstalledWheel)
|
|
33
|
+
else InstalledWheel.load(installed_wheel)
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
repack_dir = CacheDir.REPACKED_WHEELS.path(fingerprint)
|
|
37
|
+
with atomic_directory(target_dir=repack_dir) as atomic_dir:
|
|
38
|
+
if not atomic_dir.is_finalized():
|
|
39
|
+
whl = repack(
|
|
40
|
+
installed_wheel=installed_wheel,
|
|
41
|
+
dest_dir=atomic_dir.work_dir,
|
|
42
|
+
# N.B.: Some compressed tag set wheels in the wild have a wheel filename with tags
|
|
43
|
+
# in a different order from their WHEEL metadata; e.g.:
|
|
44
|
+
# cffi-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
|
|
45
|
+
# vs its WHEEL metadata:
|
|
46
|
+
# Wheel-Version: 1.0
|
|
47
|
+
# Generator: setuptools (80.9.0)
|
|
48
|
+
# Root-Is-Purelib: false
|
|
49
|
+
# Tag: cp310-cp310-manylinux_2_17_x86_64
|
|
50
|
+
# Tag: cp310-cp310-manylinux2014_x86_64
|
|
51
|
+
#
|
|
52
|
+
# This override allows higher levels to adjust for this.
|
|
53
|
+
override_wheel_file_name=distribution_name,
|
|
54
|
+
use_system_time=use_system_time,
|
|
55
|
+
)
|
|
56
|
+
with open(os.path.join(atomic_dir.work_dir, "FINGERPRINT"), "w") as fp:
|
|
57
|
+
fp.write(CacheHelper.hash(whl, hasher=hashlib.sha256))
|
|
58
|
+
|
|
59
|
+
with open(os.path.join(repack_dir, "FINGERPRINT")) as fp:
|
|
60
|
+
fingerprint = fp.read()
|
|
61
|
+
|
|
62
|
+
return FingerprintedDistribution(
|
|
63
|
+
distribution=Distribution.load(
|
|
64
|
+
os.path.join(repack_dir, distribution_name or installed_wheel.wheel_file_name())
|
|
65
|
+
),
|
|
66
|
+
fingerprint=fingerprint,
|
|
67
|
+
)
|
pex/windows/__init__.py
CHANGED
|
@@ -142,21 +142,24 @@ def create_script(
|
|
|
142
142
|
platform=SysPlatform.CURRENT, # type: SysPlatform.Value
|
|
143
143
|
gui=False, # type: bool
|
|
144
144
|
python_path=None, # type: Optional[Text]
|
|
145
|
+
overwrite=True, # type: bool
|
|
145
146
|
):
|
|
146
147
|
# type: (...) -> _Text
|
|
147
148
|
|
|
148
|
-
with safe_open("{path}.{unique}".format(path=path, unique=uuid.uuid4().hex), "wb") as fp:
|
|
149
|
-
fp.write(_load_stub(platform=platform, gui=gui).read_data())
|
|
150
|
-
with contextlib.closing(zipfile.ZipFile(fp, "a")) as zip_fp:
|
|
151
|
-
zip_fp.writestr("__main__.py", contents.encode("utf-8"), zipfile.ZIP_STORED)
|
|
152
|
-
python_path_bytes = platform.binary_name(
|
|
153
|
-
python_path or ("pythonw" if gui else "python")
|
|
154
|
-
).encode("utf-8")
|
|
155
|
-
fp.write(python_path_bytes)
|
|
156
|
-
fp.write(struct.pack("<I", len(python_path_bytes)))
|
|
157
|
-
fp.write(b"UVSC")
|
|
158
149
|
script = platform.binary_name(path)
|
|
159
|
-
|
|
150
|
+
if overwrite or not os.path.exists(script):
|
|
151
|
+
with safe_open("{path}.{unique}".format(path=path, unique=uuid.uuid4().hex), "wb") as fp:
|
|
152
|
+
fp.write(_load_stub(platform=platform, gui=gui).read_data())
|
|
153
|
+
with contextlib.closing(zipfile.ZipFile(fp, "a")) as zip_fp:
|
|
154
|
+
zip_fp.writestr("__main__.py", contents.encode("utf-8"), zipfile.ZIP_STORED)
|
|
155
|
+
python_path_bytes = platform.binary_name(
|
|
156
|
+
python_path or ("pythonw" if gui else "python")
|
|
157
|
+
).encode("utf-8")
|
|
158
|
+
fp.write(python_path_bytes)
|
|
159
|
+
fp.write(struct.pack("<I", len(python_path_bytes)))
|
|
160
|
+
fp.write(b"UVSC")
|
|
161
|
+
|
|
162
|
+
safe_rename(fp.name, script)
|
|
160
163
|
return script
|
|
161
164
|
|
|
162
165
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pex
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.60.0
|
|
4
4
|
Summary: The PEX packaging toolchain.
|
|
5
5
|
Home-page: https://github.com/pex-tool/pex
|
|
6
|
-
Download-URL: https://github.com/pex-tool/pex/releases/download/v2.
|
|
6
|
+
Download-URL: https://github.com/pex-tool/pex/releases/download/v2.60.0/pex
|
|
7
7
|
Author: The PEX developers
|
|
8
8
|
Author-email: developers@pex-tool.org
|
|
9
9
|
License-Expression: Apache-2.0
|
|
10
|
-
Project-URL: Changelog, https://github.com/pex-tool/pex/blob/v2.
|
|
10
|
+
Project-URL: Changelog, https://github.com/pex-tool/pex/blob/v2.60.0/CHANGES.md
|
|
11
11
|
Project-URL: Documentation, https://docs.pex-tool.org/
|
|
12
|
-
Project-URL: Source, https://github.com/pex-tool/pex/tree/v2.
|
|
12
|
+
Project-URL: Source, https://github.com/pex-tool/pex/tree/v2.60.0
|
|
13
13
|
Keywords: package,executable,virtualenv,lock,freeze
|
|
14
14
|
Classifier: Development Status :: 5 - Production/Stable
|
|
15
15
|
Classifier: Intended Audience :: Developers
|