pex 2.54.2__py2.py3-none-any.whl → 2.69.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/auth.py +1 -1
- pex/bin/pex.py +15 -2
- pex/build_backend/configuration.py +5 -5
- pex/build_backend/wrap.py +27 -23
- pex/build_system/pep_517.py +4 -1
- pex/cache/dirs.py +17 -12
- pex/cli/commands/lock.py +302 -165
- pex/cli/commands/pip/core.py +4 -12
- pex/cli/commands/pip/wheel.py +1 -1
- pex/cli/commands/run.py +13 -20
- pex/cli/commands/venv.py +85 -16
- pex/cli/pex.py +11 -4
- pex/common.py +57 -7
- pex/compatibility.py +1 -1
- pex/dependency_configuration.py +87 -15
- pex/dist_metadata.py +143 -25
- pex/docs/html/_pagefind/fragment/en_4250138.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_7125dad.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_785d562.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_8e94bb8.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_a0396bb.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_a8a3588.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_c07d988.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_d718411.pf_fragment +0 -0
- pex/docs/html/_pagefind/index/en_a2e3c5e.pf_index +0 -0
- pex/docs/html/_pagefind/pagefind-entry.json +1 -1
- pex/docs/html/_pagefind/pagefind.en_4ce1afa9e3.pf_meta +0 -0
- pex/docs/html/_static/documentation_options.js +1 -1
- pex/docs/html/_static/pygments.css +164 -146
- pex/docs/html/_static/styles/furo.css +1 -1
- pex/docs/html/_static/styles/furo.css.map +1 -1
- pex/docs/html/api/vars.html +25 -34
- pex/docs/html/buildingpex.html +25 -34
- pex/docs/html/genindex.html +24 -33
- pex/docs/html/index.html +25 -34
- pex/docs/html/recipes.html +25 -34
- pex/docs/html/scie.html +25 -34
- pex/docs/html/search.html +24 -33
- pex/docs/html/whatispex.html +25 -34
- pex/entry_points_txt.py +98 -0
- pex/environment.py +54 -33
- pex/finders.py +1 -1
- pex/hashing.py +71 -9
- pex/installed_wheel.py +141 -0
- pex/interpreter.py +41 -38
- pex/interpreter_constraints.py +25 -25
- pex/interpreter_implementation.py +40 -0
- pex/jobs.py +13 -6
- pex/pep_376.py +68 -384
- pex/pep_425.py +11 -2
- pex/pep_427.py +937 -205
- pex/pep_508.py +4 -5
- pex/pex_builder.py +5 -8
- pex/pex_info.py +14 -9
- pex/pip/dependencies/__init__.py +85 -13
- pex/pip/dependencies/requires.py +38 -3
- pex/pip/foreign_platform/__init__.py +4 -3
- pex/pip/installation.py +2 -2
- pex/pip/local_project.py +6 -14
- pex/pip/package_repositories/__init__.py +78 -0
- pex/pip/package_repositories/link_collector.py +96 -0
- pex/pip/tool.py +139 -33
- pex/pip/vcs.py +109 -43
- pex/pip/version.py +8 -1
- pex/requirements.py +121 -16
- pex/resolve/config.py +5 -1
- pex/resolve/configured_resolve.py +32 -10
- pex/resolve/configured_resolver.py +10 -39
- pex/resolve/downloads.py +4 -3
- pex/resolve/lock_downloader.py +16 -23
- pex/resolve/lock_resolver.py +41 -51
- pex/resolve/locked_resolve.py +89 -32
- pex/resolve/locker.py +145 -101
- pex/resolve/locker_patches.py +123 -197
- pex/resolve/lockfile/create.py +232 -87
- pex/resolve/lockfile/download_manager.py +5 -1
- pex/resolve/lockfile/json_codec.py +103 -28
- pex/resolve/lockfile/model.py +13 -35
- pex/resolve/lockfile/pep_751.py +117 -98
- pex/resolve/lockfile/requires_dist.py +17 -262
- pex/resolve/lockfile/subset.py +11 -0
- pex/resolve/lockfile/targets.py +445 -0
- pex/resolve/lockfile/updater.py +22 -10
- pex/resolve/package_repository.py +406 -0
- pex/resolve/pex_repository_resolver.py +1 -1
- pex/resolve/pre_resolved_resolver.py +19 -16
- pex/resolve/project.py +233 -47
- pex/resolve/requirement_configuration.py +28 -10
- pex/resolve/resolver_configuration.py +18 -32
- pex/resolve/resolver_options.py +234 -28
- pex/resolve/resolvers.py +3 -12
- pex/resolve/target_options.py +18 -2
- pex/resolve/target_system.py +908 -0
- pex/resolve/venv_resolver.py +670 -0
- pex/resolver.py +673 -209
- pex/scie/__init__.py +40 -1
- pex/scie/model.py +2 -0
- pex/scie/science.py +25 -3
- pex/sdist.py +219 -0
- pex/sh_boot.py +24 -21
- pex/sysconfig.py +5 -3
- pex/targets.py +31 -10
- pex/third_party/__init__.py +1 -1
- pex/tools/commands/repository.py +48 -25
- pex/vendor/__init__.py +4 -9
- pex/vendor/__main__.py +65 -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/_vendor/certifi/cacert.pem +63 -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 +46 -19
- pex/venv/venv_pex.py +6 -3
- pex/version.py +1 -1
- pex/wheel.py +188 -40
- pex/whl.py +67 -0
- pex/windows/__init__.py +14 -11
- {pex-2.54.2.dist-info → pex-2.69.0.dist-info}/METADATA +6 -5
- {pex-2.54.2.dist-info → pex-2.69.0.dist-info}/RECORD +157 -133
- {pex-2.54.2.dist-info → pex-2.69.0.dist-info}/entry_points.txt +1 -0
- {pex-2.54.2.dist-info → pex-2.69.0.dist-info}/pylock/pylock.toml +1 -1
- pex/docs/html/_pagefind/fragment/en_42c9d8c.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_45dd5a2.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_4ca74d2.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_77273d5.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_87a59c5.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_8dc89b5.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_9d1319b.pf_fragment +0 -0
- pex/docs/html/_pagefind/fragment/en_e55df9d.pf_fragment +0 -0
- pex/docs/html/_pagefind/index/en_1e98c6f.pf_index +0 -0
- pex/docs/html/_pagefind/pagefind.en_d1c488ecae.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.54.2.dist-info → pex-2.69.0.dist-info}/WHEEL +0 -0
- {pex-2.54.2.dist-info → pex-2.69.0.dist-info}/licenses/LICENSE +0 -0
- {pex-2.54.2.dist-info → pex-2.69.0.dist-info}/top_level.txt +0 -0
pex/tools/commands/repository.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Copyright 2021 Pex project contributors.
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (see LICENSE).
|
|
3
3
|
|
|
4
|
-
from __future__ import absolute_import
|
|
4
|
+
from __future__ import absolute_import, print_function
|
|
5
5
|
|
|
6
6
|
import functools
|
|
7
7
|
import logging
|
|
@@ -18,12 +18,14 @@ from pex import dist_metadata
|
|
|
18
18
|
from pex.atomic_directory import atomic_directory
|
|
19
19
|
from pex.cache.dirs import CacheDir
|
|
20
20
|
from pex.commands.command import JsonMixin, OutputMixin
|
|
21
|
-
from pex.common import
|
|
21
|
+
from pex.common import pluralize, safe_mkdir, safe_mkdtemp, safe_open
|
|
22
22
|
from pex.compatibility import Queue
|
|
23
23
|
from pex.dist_metadata import Distribution
|
|
24
24
|
from pex.environment import PEXEnvironment
|
|
25
|
+
from pex.installed_wheel import InstalledWheel
|
|
25
26
|
from pex.interpreter import PythonInterpreter
|
|
26
|
-
from pex.jobs import Job,
|
|
27
|
+
from pex.jobs import Job, iter_map_parallel
|
|
28
|
+
from pex.pep_427 import WheelInstallError, repack
|
|
27
29
|
from pex.pex import PEX
|
|
28
30
|
from pex.result import Error, Ok, Result
|
|
29
31
|
from pex.tools.command import PEXCommand
|
|
@@ -31,7 +33,7 @@ from pex.typing import TYPE_CHECKING, cast
|
|
|
31
33
|
from pex.venv.virtualenv import InstallationChoice, Virtualenv
|
|
32
34
|
|
|
33
35
|
if TYPE_CHECKING:
|
|
34
|
-
from typing import IO, Any, Callable, Iterable, Iterator, List,
|
|
36
|
+
from typing import IO, Any, Callable, Iterable, Iterator, List, Tuple
|
|
35
37
|
|
|
36
38
|
import attr # vendor:skip
|
|
37
39
|
|
|
@@ -121,6 +123,29 @@ class FindLinksRepo(object):
|
|
|
121
123
|
self._server_process.kill()
|
|
122
124
|
|
|
123
125
|
|
|
126
|
+
def _extract_wheel(
|
|
127
|
+
distribution, # type: Distribution
|
|
128
|
+
dest_dir, # type: str
|
|
129
|
+
use_system_time=False, # type: bool
|
|
130
|
+
):
|
|
131
|
+
# type: (...) -> Tuple[Distribution, Result]
|
|
132
|
+
|
|
133
|
+
try:
|
|
134
|
+
whl = repack(
|
|
135
|
+
installed_wheel=InstalledWheel.load(distribution.location),
|
|
136
|
+
dest_dir=dest_dir,
|
|
137
|
+
use_system_time=use_system_time,
|
|
138
|
+
)
|
|
139
|
+
except (InstalledWheel.LoadError, WheelInstallError) as e:
|
|
140
|
+
result = Error(str(e)) # type: Result
|
|
141
|
+
else:
|
|
142
|
+
result = Ok(
|
|
143
|
+
"{distribution}: Repacked wheel as {whl}".format(distribution=distribution, whl=whl)
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
return distribution, result
|
|
147
|
+
|
|
148
|
+
|
|
124
149
|
class Repository(JsonMixin, OutputMixin, PEXCommand):
|
|
125
150
|
"""Interact with the Python distribution repository contained in a PEX file."""
|
|
126
151
|
|
|
@@ -270,36 +295,23 @@ class Repository(JsonMixin, OutputMixin, PEXCommand):
|
|
|
270
295
|
if self.options.sources:
|
|
271
296
|
self._extract_sdist(pex, dest_dir)
|
|
272
297
|
|
|
273
|
-
def spawn_extract(distribution):
|
|
274
|
-
# type: (Distribution) -> SpawnedJob[Text]
|
|
275
|
-
env = os.environ.copy()
|
|
276
|
-
if not self.options.use_system_time:
|
|
277
|
-
env.update(REPRODUCIBLE_BUILDS_ENV)
|
|
278
|
-
job = spawn_python_job_with_setuptools_and_wheel(
|
|
279
|
-
args=["-m", "wheel", "pack", "--dest-dir", dest_dir, distribution.location],
|
|
280
|
-
interpreter=pex.interpreter,
|
|
281
|
-
stdout=subprocess.PIPE,
|
|
282
|
-
env=env,
|
|
283
|
-
)
|
|
284
|
-
return SpawnedJob.stdout(
|
|
285
|
-
job, result_func=lambda out: "{}: {}".format(distribution, out.decode())
|
|
286
|
-
)
|
|
287
|
-
|
|
288
298
|
with self._distributions_output(pex) as (distributions, output):
|
|
289
299
|
errors = [] # type: List[Distribution]
|
|
290
|
-
for result in
|
|
291
|
-
distributions,
|
|
300
|
+
for distribution, result in iter_map_parallel(
|
|
301
|
+
distributions,
|
|
302
|
+
functools.partial(
|
|
303
|
+
_extract_wheel, dest_dir=dest_dir, use_system_time=self.options.use_system_time
|
|
304
|
+
),
|
|
292
305
|
):
|
|
293
|
-
if isinstance(result,
|
|
294
|
-
distribution, error = result
|
|
306
|
+
if isinstance(result, Error):
|
|
295
307
|
errors.append(distribution)
|
|
296
308
|
output.write(
|
|
297
309
|
"Failed to build a wheel for {distribution}: {error}\n".format(
|
|
298
|
-
distribution=distribution, error=
|
|
310
|
+
distribution=distribution, error=result
|
|
299
311
|
)
|
|
300
312
|
)
|
|
301
313
|
else:
|
|
302
|
-
|
|
314
|
+
print(result, file=output)
|
|
303
315
|
if errors:
|
|
304
316
|
return Error(
|
|
305
317
|
"Failed to build wheels for {count} {distributions}.".format(
|
|
@@ -435,6 +447,17 @@ class Repository(JsonMixin, OutputMixin, PEXCommand):
|
|
|
435
447
|
with open(os.path.join(chroot, "setup.py"), "w") as fp:
|
|
436
448
|
fp.write("import setuptools; setuptools.setup()")
|
|
437
449
|
|
|
450
|
+
with open(os.path.join(chroot, "pyproject.toml"), "w") as fp:
|
|
451
|
+
fp.write(
|
|
452
|
+
dedent(
|
|
453
|
+
"""\
|
|
454
|
+
[build-system]
|
|
455
|
+
requires = ["setuptools"]
|
|
456
|
+
backend = "setuptools.build_meta"
|
|
457
|
+
"""
|
|
458
|
+
)
|
|
459
|
+
)
|
|
460
|
+
|
|
438
461
|
spawn_python_job_with_setuptools_and_wheel(
|
|
439
462
|
args=["setup.py", "sdist", "--dist-dir", dest_dir],
|
|
440
463
|
interpreter=pex.interpreter,
|
pex/vendor/__init__.py
CHANGED
|
@@ -201,9 +201,11 @@ class VendorSpec(
|
|
|
201
201
|
# Automated update of Pip's vendored certifi's cacert.pem to that from certifi 2025.7.14.
|
|
202
202
|
# 12.) https://github.com/pex-tool/pip/commit/21a4058f77f9864151510b725419206a2e5645ae
|
|
203
203
|
# Automated update of Pip's vendored certifi's cacert.pem to that from certifi 2025.8.3.
|
|
204
|
+
# 13.) https://github.com/pex-tool/pip/commit/cef23bb7153ec49037d963e84fcad0f08880fbc5
|
|
205
|
+
# Automated update of Pip's vendored certifi's cacert.pem to that from certifi 2025.10.5.
|
|
204
206
|
PIP_SPEC = VendorSpec.git(
|
|
205
207
|
repo="https://github.com/pex-tool/pip",
|
|
206
|
-
commit="
|
|
208
|
+
commit="cef23bb7153ec49037d963e84fcad0f08880fbc5",
|
|
207
209
|
project_name="pip",
|
|
208
210
|
rewrite=False,
|
|
209
211
|
)
|
|
@@ -316,7 +318,6 @@ def vendor_runtime(
|
|
|
316
318
|
dest_basedir, # type: str
|
|
317
319
|
label, # type: str
|
|
318
320
|
root_module_names, # type: Iterable[str]
|
|
319
|
-
include_dist_info=(), # type: Iterable[str]
|
|
320
321
|
):
|
|
321
322
|
# type: (...) -> Set[str]
|
|
322
323
|
"""Includes portions of vendored distributions in a chroot.
|
|
@@ -329,7 +330,6 @@ def vendor_runtime(
|
|
|
329
330
|
:param dest_basedir: The prefix to store the vendored code under in the ``chroot``.
|
|
330
331
|
:param label: The chroot label for the vendored code fileset.
|
|
331
332
|
:param root_module_names: The names of the root vendored modules to include in the chroot.
|
|
332
|
-
:param include_dist_info: Include the .dist-info dirs associated with these root module names.
|
|
333
333
|
:returns: The set of absolute paths of the source files that were vendored.
|
|
334
334
|
:raise: :class:`ValueError` if any of the given ``root_module_names`` could not be found amongst
|
|
335
335
|
the vendored code and added to the chroot.
|
|
@@ -368,12 +368,7 @@ def vendor_runtime(
|
|
|
368
368
|
vendor_module_names[name] = True
|
|
369
369
|
TRACER.log("Vendoring {} from {} @ {}".format(name, spec, spec.target_dir), V=3)
|
|
370
370
|
|
|
371
|
-
dirs[:] = packages
|
|
372
|
-
d
|
|
373
|
-
for project in include_dist_info
|
|
374
|
-
for d in dirs
|
|
375
|
-
if d.startswith(project) and d.endswith(".dist-info")
|
|
376
|
-
]
|
|
371
|
+
dirs[:] = packages
|
|
377
372
|
files[:] = modules
|
|
378
373
|
|
|
379
374
|
# We copy over sources and data only; no pyc files.
|
pex/vendor/__main__.py
CHANGED
|
@@ -6,11 +6,12 @@ from __future__ import absolute_import, print_function
|
|
|
6
6
|
import glob
|
|
7
7
|
import os
|
|
8
8
|
import pkgutil
|
|
9
|
-
import re
|
|
10
9
|
import subprocess
|
|
11
10
|
import sys
|
|
11
|
+
import zipfile
|
|
12
12
|
from argparse import ArgumentParser
|
|
13
13
|
from collections import OrderedDict, defaultdict
|
|
14
|
+
from contextlib import closing
|
|
14
15
|
from typing import FrozenSet, Iterator, List
|
|
15
16
|
|
|
16
17
|
import libcst
|
|
@@ -36,7 +37,15 @@ from libcst import (
|
|
|
36
37
|
SimpleString,
|
|
37
38
|
)
|
|
38
39
|
|
|
39
|
-
from pex.common import
|
|
40
|
+
from pex.common import (
|
|
41
|
+
REPRODUCIBLE_BUILDS_ENV,
|
|
42
|
+
safe_delete,
|
|
43
|
+
safe_mkdir,
|
|
44
|
+
safe_mkdtemp,
|
|
45
|
+
safe_open,
|
|
46
|
+
safe_rmtree,
|
|
47
|
+
)
|
|
48
|
+
from pex.pep_427 import ZipMetadata
|
|
40
49
|
from pex.typing import TYPE_CHECKING
|
|
41
50
|
from pex.vendor import VendorSpec, iter_vendor_specs
|
|
42
51
|
|
|
@@ -362,10 +371,10 @@ def vendorize(root_dir, vendor_specs, prefix, update):
|
|
|
362
371
|
# importable code must lie at the top of its vendored chroot. Although
|
|
363
372
|
# `pex.pep_472.install_wheel_chroot` encodes the logic to achieve this layout, we can't run
|
|
364
373
|
# that without 1st approximating that layout!. We take the tack of performing an importable
|
|
365
|
-
# installation using `pip wheel ...` + `
|
|
374
|
+
# installation using `pip wheel ...` + `unzip ...`. Although simply unzipping a wheel
|
|
366
375
|
# does not make it importable in general, it works for our pure-python vendored code.
|
|
367
376
|
|
|
368
|
-
|
|
377
|
+
unzipped_wheel_chroots_by_vendor_spec = defaultdict(list)
|
|
369
378
|
for vendor_spec in vendor_specs:
|
|
370
379
|
# NB: We set --no-build-isolation to prevent pip from installing the requirements listed in
|
|
371
380
|
# its [build-system] config in its pyproject.toml.
|
|
@@ -387,6 +396,7 @@ def vendorize(root_dir, vendor_specs, prefix, update):
|
|
|
387
396
|
cmd = [
|
|
388
397
|
"pip",
|
|
389
398
|
"wheel",
|
|
399
|
+
"--prefer-binary",
|
|
390
400
|
"--no-build-isolation",
|
|
391
401
|
"--no-cache-dir",
|
|
392
402
|
"--wheel-dir",
|
|
@@ -408,7 +418,9 @@ def vendorize(root_dir, vendor_specs, prefix, update):
|
|
|
408
418
|
if os.path.isfile(constraints_file):
|
|
409
419
|
cmd.extend(["--constraint", constraints_file])
|
|
410
420
|
|
|
411
|
-
|
|
421
|
+
env = os.environ.copy()
|
|
422
|
+
env.update(REPRODUCIBLE_BUILDS_ENV)
|
|
423
|
+
result = subprocess.call(cmd, env=env)
|
|
412
424
|
if result != 0:
|
|
413
425
|
raise VendorizeError("Failed to vendor {!r}".format(vendor_spec))
|
|
414
426
|
|
|
@@ -416,22 +428,17 @@ def vendorize(root_dir, vendor_specs, prefix, update):
|
|
|
416
428
|
# later.
|
|
417
429
|
safe_mkdir(vendor_spec.target_dir)
|
|
418
430
|
for wheel_file in glob.glob(os.path.join(wheels_dir, "*.whl")):
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
"{output}".format(wheel_file=wheel_file, output=output)
|
|
431
|
+
unzipped_wheel_dir = os.path.join(
|
|
432
|
+
wheels_dir, ".extracted", os.path.basename(wheel_file)
|
|
433
|
+
)
|
|
434
|
+
with closing(zipfile.ZipFile(wheel_file)) as zf:
|
|
435
|
+
zf.extractall(unzipped_wheel_dir)
|
|
436
|
+
unzipped_wheel_chroots_by_vendor_spec[vendor_spec].append(
|
|
437
|
+
(unzipped_wheel_dir, wheel_file)
|
|
427
438
|
)
|
|
428
|
-
|
|
429
|
-
unpacked_wheel_dir = os.path.join(extract_dir, os.path.basename(wheel_file))
|
|
430
|
-
os.rename(unpacked_to_dir, unpacked_wheel_dir)
|
|
431
|
-
unpacked_wheel_chroots_by_vendor_spec[vendor_spec].append(unpacked_wheel_dir)
|
|
432
|
-
for path in os.listdir(unpacked_wheel_dir):
|
|
439
|
+
for path in os.listdir(unzipped_wheel_dir):
|
|
433
440
|
os.symlink(
|
|
434
|
-
os.path.join(
|
|
441
|
+
os.path.join(unzipped_wheel_dir, path),
|
|
435
442
|
os.path.join(vendor_spec.target_dir, path),
|
|
436
443
|
)
|
|
437
444
|
|
|
@@ -484,7 +491,8 @@ def vendorize(root_dir, vendor_specs, prefix, update):
|
|
|
484
491
|
# Import all code needed below now before we move any vendored bits it depends on temporarily
|
|
485
492
|
# back to the prefix site-packages dir.
|
|
486
493
|
from pex.dist_metadata import ProjectNameAndVersion, Requirement
|
|
487
|
-
from pex.pep_427 import install_wheel_chroot
|
|
494
|
+
from pex.pep_427 import InstallableWheel, InstallPaths, install_wheel_chroot
|
|
495
|
+
from pex.wheel import Wheel
|
|
488
496
|
|
|
489
497
|
for vendor_spec in vendor_specs:
|
|
490
498
|
print(
|
|
@@ -512,29 +520,43 @@ def vendorize(root_dir, vendor_specs, prefix, update):
|
|
|
512
520
|
# We want the primary artifact to own any special Pex wheel chroot metadata; so we arrange
|
|
513
521
|
# a list of installs that place it last.
|
|
514
522
|
primary_project = Requirement.parse(vendor_spec.requirement).project_name
|
|
515
|
-
wheel_chroots_by_project_name =
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
523
|
+
wheel_chroots_by_project_name = OrderedDict()
|
|
524
|
+
for wheel_chroot, wheel_file in unzipped_wheel_chroots_by_vendor_spec[vendor_spec]:
|
|
525
|
+
pnav = ProjectNameAndVersion.from_filename(wheel_chroot)
|
|
526
|
+
wheel_chroots_by_project_name[pnav.canonicalized_project_name] = (
|
|
527
|
+
pnav.canonicalized_project_name,
|
|
528
|
+
pnav.canonicalized_version,
|
|
529
|
+
wheel_chroot,
|
|
530
|
+
wheel_file,
|
|
531
|
+
)
|
|
532
|
+
|
|
533
|
+
(
|
|
534
|
+
project_name,
|
|
535
|
+
version,
|
|
536
|
+
primary_wheel_chroot,
|
|
537
|
+
primary_wheel_file,
|
|
538
|
+
) = wheel_chroots_by_project_name.pop(primary_project)
|
|
522
539
|
wheels_chroots_to_install = list(wheel_chroots_by_project_name.values())
|
|
523
|
-
wheels_chroots_to_install.append(
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
540
|
+
wheels_chroots_to_install.append(
|
|
541
|
+
(project_name, version, primary_wheel_chroot, primary_wheel_file)
|
|
542
|
+
)
|
|
543
|
+
|
|
544
|
+
for project_name, version, wheel_chroot, wheel_file in wheels_chroots_to_install:
|
|
545
|
+
with closing(zipfile.ZipFile(wheel_file)) as zf:
|
|
546
|
+
zip_metadata = ZipMetadata.from_zip(filename=wheel_file, info_list=zf.infolist())
|
|
547
|
+
vendored_wheel = Wheel.load(wheel_chroot)
|
|
548
|
+
install_wheel_chroot(
|
|
549
|
+
wheel=InstallableWheel(
|
|
550
|
+
wheel=vendored_wheel,
|
|
551
|
+
install_paths=InstallPaths.wheel(
|
|
552
|
+
destination=wheel_chroot, wheel=vendored_wheel
|
|
553
|
+
),
|
|
554
|
+
zip_metadata=zip_metadata,
|
|
555
|
+
),
|
|
556
|
+
destination=vendor_spec.target_dir,
|
|
557
|
+
# N.B.: We potentially re-wrote imports; so the file needs to be re-hashed.
|
|
558
|
+
re_hash=True,
|
|
536
559
|
)
|
|
537
|
-
install_wheel_chroot(wheel_path=wheel_files[0], destination=vendor_spec.target_dir)
|
|
538
560
|
|
|
539
561
|
|
|
540
562
|
if __name__ == "__main__":
|
|
@@ -551,6 +573,8 @@ if __name__ == "__main__":
|
|
|
551
573
|
root_directory = VendorSpec.ROOT
|
|
552
574
|
try:
|
|
553
575
|
safe_rmtree(VendorSpec.vendor_root())
|
|
576
|
+
# Stabilize our umask to get the same file perms on any run.
|
|
577
|
+
os.umask(0o022)
|
|
554
578
|
vendorize(
|
|
555
579
|
root_dir=root_directory,
|
|
556
580
|
vendor_specs=list(iter_vendor_specs()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fingerprint":
|
|
1
|
+
{"fingerprint":"93bbf4f9990c23d7f074400fbc7b72699025043cff2ba03c34196ad876cc265c","record_relpath":"ansicolors-1.1.8.dist-info/RECORD","root_is_purelib":true,"stash_dir":".prefix","sys_path_entries":["."]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
ansicolors-1.1.8.dist-info/DESCRIPTION.rst,sha256=hgL3qWOqDdnS5m7OGbUJvvZ_gOnggqyKN0LzedMq3o4,7900
|
|
2
|
+
ansicolors-1.1.8.dist-info/METADATA,sha256=91m-dxXKkt0Fg_Zv_HA7Zlxx2f1bGDFRn0cMD-6YkvI,9006
|
|
3
|
+
ansicolors-1.1.8.dist-info/RECORD,,
|
|
4
|
+
ansicolors-1.1.8.dist-info/WHEEL,sha256=o2k-Qa-RMNIJmUdIc7KU6VWR_ErNRbWNlxDIpl7lm34,110
|
|
5
|
+
ansicolors-1.1.8.dist-info/metadata.json,sha256=jEvYWhL1nvf1IOuhZN76kIr3cS4QQN9_aql483E8Sd8,1181
|
|
6
|
+
ansicolors-1.1.8.dist-info/top_level.txt,sha256=igtcW1b_UlN1_x_2Ooi1-5-0ZZzr7UbkgT0OyOkOz1A,7
|
|
7
|
+
colors/__init__.py,sha256=7UV3RlAaU9ihmC33l1KnlJ19mV79q9knPrayzG0LA4g,119
|
|
8
|
+
colors/colors.py,sha256=VNM8dhjwb51Q3rbNFLhAfl-Xi3vd88NLnLT8BavVpXg,5603
|
|
9
|
+
colors/csscolors.py,sha256=pYW3Yisj3bGz-ocg23jxmqQ7YjNFoaZuLW38Lrqd8pg,6584
|
|
10
|
+
colors/version.py,sha256=1AmxhanHVlK7-ylUJmxvVmAhH674NXaZPyMgOYTXThQ,22
|
|
11
|
+
ansicolors-1.1.8.pex-info/original-whl-info.json,sha256=HbV2rpplaYIBPX3BXgmvHbJ3jE4Kai_UN1AI0iFOiAg,717
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"entries":[["colors/__init__.py",[2017,5,17,21,12,12],2175008768],["colors/colors.py",[2017,6,2,20,55,34],2175008768],["colors/csscolors.py",[2017,6,2,19,55,26],2175008768],["colors/version.py",[2017,6,2,21,17,26],2175008768],["ansicolors-1.1.8.dist-info/DESCRIPTION.rst",[2017,6,2,21,22,12],2175008768],["ansicolors-1.1.8.dist-info/metadata.json",[2017,6,2,21,22,12],2175008768],["ansicolors-1.1.8.dist-info/top_level.txt",[2017,6,2,21,22,12],2175008768],["ansicolors-1.1.8.dist-info/WHEEL",[2017,6,2,21,22,12],2175008768],["ansicolors-1.1.8.dist-info/METADATA",[2017,6,2,21,22,12],2175008768],["ansicolors-1.1.8.dist-info/RECORD",[2017,6,2,21,22,12],2175008768]],"filename":"ansicolors-1.1.8-py2.py3-none-any.whl"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fingerprint":
|
|
1
|
+
{"fingerprint":"24fd20ba81e67b247f15013f7f14f1932d342923d2f07d3a2cc73f264d01ca28","record_relpath":"appdirs-1.4.4.dist-info/RECORD","root_is_purelib":true,"stash_dir":".prefix","sys_path_entries":["."]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
appdirs.py,sha256=g99s2sXhnvTEm79oj4bWI0Toapc-_SmKKNXvOXHkVic,24720
|
|
2
|
+
appdirs-1.4.4.dist-info/LICENSE.txt,sha256=Nt200KdFqTqyAyA9cZCBSxuJcn0lTK_0jHp6-71HAAs,1097
|
|
3
|
+
appdirs-1.4.4.dist-info/METADATA,sha256=k5TVfXMNKGHTfp2wm6EJKTuGwGNuoQR5TqQgH8iwG8M,8981
|
|
4
|
+
appdirs-1.4.4.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110
|
|
5
|
+
appdirs-1.4.4.dist-info/top_level.txt,sha256=nKncE8CUqZERJ6VuQWL4_bkunSPDNfn7KZqb4Tr5YEM,8
|
|
6
|
+
appdirs-1.4.4.dist-info/RECORD,,
|
|
7
|
+
appdirs-1.4.4.pex-info/original-whl-info.json,sha256=JGLXb1lcQ1mCmCous2iCwcoSL-PRXEU0XwIvlUrxRqU,449
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"entries":[["appdirs.py",[2020,5,10,23,54,42],2175008768],["appdirs-1.4.4.dist-info/LICENSE.txt",[2020,5,11,7,49,18],2175008768],["appdirs-1.4.4.dist-info/METADATA",[2020,5,11,7,49,18],2175008768],["appdirs-1.4.4.dist-info/WHEEL",[2020,5,11,7,49,18],2175008768],["appdirs-1.4.4.dist-info/top_level.txt",[2020,5,11,7,49,18],2175008768],["appdirs-1.4.4.dist-info/RECORD",[2020,5,11,7,49,18],28573696]],"filename":"appdirs-1.4.4-py2.py3-none-any.whl"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fingerprint":
|
|
1
|
+
{"fingerprint":"60e0467569716898b2972fe5a3d4c9949a86cabb361124271abdc4fda2aabc8c","record_relpath":"attrs-21.5.0.dev0.dist-info/RECORD","root_is_purelib":true,"stash_dir":".prefix","sys_path_entries":["."]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
attr/__init__.py,sha256=HLLlMhzttVknGFFJ3WtFVf5aZB2LE3IRGWm46Cl0_Is,1672
|
|
2
|
+
attr/__init__.pyi,sha256=ubRkstoRHPpQN17iA0OCh8waIwZ5NeJgbz0lwI8XUjY,15100
|
|
3
|
+
attr/_cmp.py,sha256=JP0N7OIyTqIR3prUDfMZOR4DV4tlV_xXf39-bQg7xOo,4165
|
|
4
|
+
attr/_cmp.pyi,sha256=oyjJVytrwwkUJOoe332IiYzp6pCVZEKKcKveH-ev604,317
|
|
5
|
+
attr/_compat.py,sha256=i8u27AAK_4SzQnmTf3aliGV27UdYbJxdZ-O0tOHbLU8,8396
|
|
6
|
+
attr/_config.py,sha256=aj1Lh8t2CuVa5nSxgCrLQtg_ZSdO8ZKeNJQd6RvpIp8,892
|
|
7
|
+
attr/_funcs.py,sha256=sm_D12y2IyRW_bCnR7M-O7U5qHaieXr0BzINwJ7_K38,14753
|
|
8
|
+
attr/_make.py,sha256=3sBkj8T3EkP-Jb_1HOzzEWeq59rK0uHOZzfoX35kB74,102691
|
|
9
|
+
attr/_next_gen.py,sha256=kZVQUsM4hhs26s--kwKcKOky8oevJvXpagnZ0xzAnbc,5728
|
|
10
|
+
attr/_version_info.py,sha256=sxD9yNai0jGbur_-RGEQHbgV2YX5_5G9PhrhBA5pA54,2194
|
|
11
|
+
attr/_version_info.pyi,sha256=x_M3L3WuB7r_ULXAWjx959udKQ4HLB8l-hsc1FDGNvk,209
|
|
12
|
+
attr/converters.py,sha256=uiiWTz8GLJe8I1Ty7UICK1DegVUnqHTXbOSnar7g7Nk,4078
|
|
13
|
+
attr/converters.pyi,sha256=MQo7iEzPNVoFpKqD30sVwgVpdNoIeSCF2nsXvoxLZ-Y,416
|
|
14
|
+
attr/exceptions.py,sha256=BMg7AljkJnvG-irMwL2TBHYlaLBXhSKnzoEWo4e42Zw,1981
|
|
15
|
+
attr/exceptions.pyi,sha256=zZq8bCUnKAy9mDtBEw42ZhPhAUIHoTKedDQInJD883M,539
|
|
16
|
+
attr/filters.py,sha256=JGZgvPGkdOfttkoL6XhXS6ZCoaVV5nZ8GCYeZNUN_mE,1124
|
|
17
|
+
attr/filters.pyi,sha256=_Sm80jGySETX_Clzdkon5NHVjQWRl3Y3liQKZX1czXc,215
|
|
18
|
+
attr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
+
attr/setters.py,sha256=rH_UtQuHgQEC7hfZyMO_SJW0R1Gus7-a83U8igZfqs8,1466
|
|
20
|
+
attr/setters.pyi,sha256=7dM10rqpQVDW0y-iJUnq8rabdO5Wx2Sbo5LwNa0IXl0,573
|
|
21
|
+
attr/validators.py,sha256=jVE9roaSOmTf0dJNSLHNaQNilkrlzc3pNNBKmv0g7pk,15966
|
|
22
|
+
attr/validators.pyi,sha256=adn6rNbIXmRXlg_FKrTmWj0dOX0vKTsGG82Jd3YcJbQ,2268
|
|
23
|
+
attrs/__init__.py,sha256=aX2i9JFdrtqLG9y6EYU_T5WB6Q_wRdQSCz3oSYo4vjs,1787
|
|
24
|
+
attrs/__init__.pyi,sha256=57aCxUJukK9lZlrUgk9RuWiBiPY5DzDKJAJkhbrStYw,1982
|
|
25
|
+
attrs/converters.py,sha256=Qest7tYhZchJXF5lqfLGkUhEYYT4NmKg8Ril1_g0Ooo,216
|
|
26
|
+
attrs/exceptions.py,sha256=0bGHmll9g3D8T0q6FCer3NWlaNFwY2nKJeO4Y6GK-0M,216
|
|
27
|
+
attrs/filters.py,sha256=nXj6QjEP-gY_2d0oR7njS_jXJ82wEVdd9P5xXf46eW0,210
|
|
28
|
+
attrs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
+
attrs/setters.py,sha256=pDIk-WAal-Qk05-porL8BAmd8AoP1PL6yLiyZMHg7RM,210
|
|
30
|
+
attrs/validators.py,sha256=wM1oQrUTrlyY9_bey9ivrdUXk9mELYbwwwU_USDQYTo,216
|
|
31
|
+
attrs-21.5.0.dev0.dist-info/AUTHORS.rst,sha256=wsqCNbGz_mklcJrt54APIZHZpoTIJLkXqEhhn4Nd8hc,752
|
|
32
|
+
attrs-21.5.0.dev0.dist-info/LICENSE,sha256=v2WaKLSSQGAvVrvfSQy-LsUJsVuY-Z17GaUsdA4yeGM,1082
|
|
33
|
+
attrs-21.5.0.dev0.dist-info/METADATA,sha256=-t3LVgMrh0oyIepApHAVYSGj-Yoj1ROrr3UsX0XZt0I,9810
|
|
34
|
+
attrs-21.5.0.dev0.dist-info/WHEEL,sha256=ADKeyaGyKF5DwBNE0sRE5pvW-bSkFMJfBuhzZ3rceP4,110
|
|
35
|
+
attrs-21.5.0.dev0.dist-info/top_level.txt,sha256=AGbmKnOtYpdkLRsDRQVSBIwfL32pAQ6BSo1mt-BxI7M,11
|
|
36
|
+
attrs-21.5.0.dev0.dist-info/RECORD,,
|
|
37
|
+
attrs-21.5.0.dev0.pex-info/original-whl-info.json,sha256=tci_1h9VD9j8cIrPFSQd8qGT7aM-uL1UXofO4PR2Mmo,1968
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"entries":[["attr/__init__.py",[1980,1,1,0,0,0],2175008768],["attr/__init__.pyi",[1980,1,1,0,0,0],2175008768],["attr/_cmp.py",[1980,1,1,0,0,0],2175008768],["attr/_cmp.pyi",[1980,1,1,0,0,0],2175008768],["attr/_compat.py",[1980,1,1,0,0,0],2175008768],["attr/_config.py",[1980,1,1,0,0,0],2175008768],["attr/_funcs.py",[1980,1,1,0,0,0],2175008768],["attr/_make.py",[1980,1,1,0,0,0],2175008768],["attr/_next_gen.py",[1980,1,1,0,0,0],2175008768],["attr/_version_info.py",[1980,1,1,0,0,0],2175008768],["attr/_version_info.pyi",[1980,1,1,0,0,0],2175008768],["attr/converters.py",[1980,1,1,0,0,0],2175008768],["attr/converters.pyi",[1980,1,1,0,0,0],2175008768],["attr/exceptions.py",[1980,1,1,0,0,0],2175008768],["attr/exceptions.pyi",[1980,1,1,0,0,0],2175008768],["attr/filters.py",[1980,1,1,0,0,0],2175008768],["attr/filters.pyi",[1980,1,1,0,0,0],2175008768],["attr/py.typed",[1980,1,1,0,0,0],2175008768],["attr/setters.py",[1980,1,1,0,0,0],2175008768],["attr/setters.pyi",[1980,1,1,0,0,0],2175008768],["attr/validators.py",[1980,1,1,0,0,0],2175008768],["attr/validators.pyi",[1980,1,1,0,0,0],2175008768],["attrs/__init__.py",[1980,1,1,0,0,0],2175008768],["attrs/__init__.pyi",[1980,1,1,0,0,0],2175008768],["attrs/converters.py",[1980,1,1,0,0,0],2175008768],["attrs/exceptions.py",[1980,1,1,0,0,0],2175008768],["attrs/filters.py",[1980,1,1,0,0,0],2175008768],["attrs/py.typed",[1980,1,1,0,0,0],2175008768],["attrs/setters.py",[1980,1,1,0,0,0],2175008768],["attrs/validators.py",[1980,1,1,0,0,0],2175008768],["attrs-21.5.0.dev0.dist-info/AUTHORS.rst",[1980,1,1,0,0,0],2175008768],["attrs-21.5.0.dev0.dist-info/LICENSE",[1980,1,1,0,0,0],2175008768],["attrs-21.5.0.dev0.dist-info/METADATA",[1980,1,1,0,0,0],2175008768],["attrs-21.5.0.dev0.dist-info/WHEEL",[1980,1,1,0,0,0],2175008768],["attrs-21.5.0.dev0.dist-info/top_level.txt",[1980,1,1,0,0,0],2175008768],["attrs-21.5.0.dev0.dist-info/RECORD",[1980,1,1,0,0,0],28573696]],"filename":"attrs-21.5.0.dev0-py2.py3-none-any.whl"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fingerprint":
|
|
1
|
+
{"fingerprint":"fb91f8df1ae86fdd0ebd7287158df23cf6d56791475d93841e7d3a76ec4eb23f","record_relpath":"packaging-20.9.dist-info/RECORD","root_is_purelib":true,"stash_dir":".prefix","sys_path_entries":["."]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
packaging/__about__.py,sha256=j4B7IMMSqpUnYzcYd5H5WZlILXevD7Zm_n9lj_TROTw,726
|
|
2
|
+
packaging/__init__.py,sha256=6enbp5XgRfjBjsI9-bn00HjHf5TH21PDMOKkJW8xw-w,562
|
|
3
|
+
packaging/_compat.py,sha256=MXdsGpSE_W-ZrHoC87andI4LV2FAwU7HLL-eHe_CjhU,1128
|
|
4
|
+
packaging/_structures.py,sha256=ozkCX8Q8f2qE1Eic3YiQ4buDVfgz2iYevY9e7R2y3iY,2022
|
|
5
|
+
packaging/_typing.py,sha256=x59EhQ57TMT-kTRyLZV25HZvYGGwbucTo6iKh_O0tMw,1812
|
|
6
|
+
packaging/markers.py,sha256=4ZyE7J0_j6Vj-3A13sKdirWa6ZIwQfOhXk9GsEtbuvw,9766
|
|
7
|
+
packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
+
packaging/requirements.py,sha256=mltyb1A8XamaZeRtKuzVn0Rk5q7gMPG3V-lvv_cXwDA,5413
|
|
9
|
+
packaging/specifiers.py,sha256=RaxQ-JKyCqI5QBm6gDvboZ2K6jjLVd-pxq0kvYf28kc,32208
|
|
10
|
+
packaging/tags.py,sha256=BMEL_3W3E8nXK_AXAWqmlYccsvoznFKkTBkTPR48DB8,29561
|
|
11
|
+
packaging/utils.py,sha256=5vUxwCVYSmaNJFgd7KaCBpxHXQN89KIvRLvCsDzao0k,4385
|
|
12
|
+
packaging/version.py,sha256=t7FpsZKmDncMn6EG28dEu_5NBZUa9_HVoiG-fsDo3oc,15974
|
|
13
|
+
packaging-20.9.dist-info/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197
|
|
14
|
+
packaging-20.9.dist-info/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
|
|
15
|
+
packaging-20.9.dist-info/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344
|
|
16
|
+
packaging-20.9.dist-info/METADATA,sha256=rLxNembuaMRrFbibyM7Twl76eRsNmPlHYPm2URn1o0s,13299
|
|
17
|
+
packaging-20.9.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110
|
|
18
|
+
packaging-20.9.dist-info/top_level.txt,sha256=zFdHrhWnPslzsiP455HutQsqPB6v0KCtNUMtUtrefDw,10
|
|
19
|
+
packaging-20.9.dist-info/RECORD,,
|
|
20
|
+
packaging-20.9.pex-info/original-whl-info.json,sha256=LfxX9D2qg_rTtBO9M27q1I086FpdjJ4Vq_fBWUpIrbE,1237
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"entries":[["packaging/__about__.py",[2021,1,29,20,22,48],2175008768],["packaging/__init__.py",[2020,12,11,23,44,40],2175008768],["packaging/_compat.py",[2020,5,2,17,34,34],2175008768],["packaging/_structures.py",[2019,10,5,0,21,0],2175008768],["packaging/_typing.py",[2020,5,2,17,34,34],2175008768],["packaging/markers.py",[2021,1,25,2,19,6],2175008768],["packaging/py.typed",[2019,11,8,18,53,20],2175008768],["packaging/requirements.py",[2021,1,25,2,19,6],2175008768],["packaging/specifiers.py",[2021,1,25,2,19,6],2175008768],["packaging/tags.py",[2021,1,25,2,19,6],2175008768],["packaging/utils.py",[2021,1,29,3,13,40],2175008768],["packaging/version.py",[2020,11,14,0,44,2],2175008768],["packaging-20.9.dist-info/LICENSE",[2021,1,29,20,22,56],2175008768],["packaging-20.9.dist-info/LICENSE.APACHE",[2021,1,29,20,22,56],2175008768],["packaging-20.9.dist-info/LICENSE.BSD",[2021,1,29,20,22,56],2175008768],["packaging-20.9.dist-info/METADATA",[2021,1,29,20,22,56],2175008768],["packaging-20.9.dist-info/WHEEL",[2021,1,29,20,22,56],2175008768],["packaging-20.9.dist-info/top_level.txt",[2021,1,29,20,22,56],2175008768],["packaging-20.9.dist-info/RECORD",[2021,1,29,20,22,56],28573696]],"filename":"packaging-20.9-py2.py3-none-any.whl"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
pyparsing.py,sha256=oxX_ZOz8t-eros-UWY7nJgcdUgD-rQ53Ck0qp7_v3Ig,273365
|
|
2
|
+
pyparsing-2.4.7.dist-info/LICENSE,sha256=ENUSChaAWAT_2otojCIL-06POXQbVzIGBNRVowngGXI,1023
|
|
3
|
+
pyparsing-2.4.7.dist-info/METADATA,sha256=Ry40soZZiZrAkSMQT_KU1_1REe6FKa5UWzbT6YA8Mxs,3636
|
|
4
|
+
pyparsing-2.4.7.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110
|
|
5
|
+
pyparsing-2.4.7.dist-info/top_level.txt,sha256=eUOjGzJVhlQ3WS2rFAy2mN3LX_7FKTM5GSJ04jfnLmU,10
|
|
6
|
+
pyparsing-2.4.7.dist-info/RECORD,,
|
|
7
|
+
pyparsing-2.4.7.pex-info/original-whl-info.json,sha256=u4VqXTrVJm7IFikaLDH2Y39YxeWguQyq6K1iqnxk1HQ,458
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"entries":[["pyparsing.py",[2020,3,31,2,48,56],2176057344],["pyparsing-2.4.7.dist-info/LICENSE",[2020,4,5,22,19,32],2175008768],["pyparsing-2.4.7.dist-info/METADATA",[2020,4,5,22,19,32],2176057344],["pyparsing-2.4.7.dist-info/WHEEL",[2020,4,5,22,19,32],2176057344],["pyparsing-2.4.7.dist-info/top_level.txt",[2020,4,5,22,19,32],2175008768],["pyparsing-2.4.7.dist-info/RECORD",[2020,4,5,22,19,32],28573696]],"filename":"pyparsing-2.4.7-py2.py3-none-any.whl"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fingerprint":
|
|
1
|
+
{"fingerprint":"cb292a10d66bc05830548f9ae6da7d06b33cda7955eccb68a065436b119fefac","record_relpath":"packaging-21.3.dist-info/RECORD","root_is_purelib":true,"stash_dir":".prefix","sys_path_entries":["."]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
packaging/__about__.py,sha256=ugASIO2w1oUyH8_COqQ2X_s0rDhjbhQC3yJocD03h2c,661
|
|
2
|
+
packaging/__init__.py,sha256=b9Kk5MF7KxhhLgcDmiUWukN-LatWFxPdNug0joPhHSk,497
|
|
3
|
+
packaging/_manylinux.py,sha256=XcbiXB-qcjv3bcohp6N98TMpOP4_j3m-iOA8ptK2GWY,11488
|
|
4
|
+
packaging/_musllinux.py,sha256=_KGgY_qc7vhMGpoqss25n2hiLCNKRtvz9mCrS7gkqyc,4378
|
|
5
|
+
packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431
|
|
6
|
+
packaging/markers.py,sha256=DQY_Q3tWQ4FQSLQTa3oM40cxkivEDOHhDL7CfKFMRFw,8781
|
|
7
|
+
packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
+
packaging/requirements.py,sha256=NT4ek1vbyuC1yuYOrOK-tnpX-5b2oMWx2RRS9HsXyFw,4973
|
|
9
|
+
packaging/specifiers.py,sha256=LRQ0kFsHrl5qfcFNEEJrIFYsnIHQUJXY9fIsakTrrqE,30110
|
|
10
|
+
packaging/tags.py,sha256=lmsnGNiJ8C4D_Pf9PbM0qgbZvD9kmB9lpZBQUZa3R_Y,15699
|
|
11
|
+
packaging/utils.py,sha256=dJjeat3BS-TYn1RrUFVwufUMasbtzLfYRoy_HXENeFQ,4200
|
|
12
|
+
packaging/version.py,sha256=_fLRNrFrxYcHVfyo8vk9j8s6JM8N_xsSxVFr6RJyco8,14665
|
|
13
|
+
packaging-21.3.dist-info/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197
|
|
14
|
+
packaging-21.3.dist-info/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
|
|
15
|
+
packaging-21.3.dist-info/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344
|
|
16
|
+
packaging-21.3.dist-info/METADATA,sha256=KuKIy6qDLP3svIt6ejCbxBDhvq11ebkgUN55MeyKFyc,15147
|
|
17
|
+
packaging-21.3.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92
|
|
18
|
+
packaging-21.3.dist-info/top_level.txt,sha256=zFdHrhWnPslzsiP455HutQsqPB6v0KCtNUMtUtrefDw,10
|
|
19
|
+
packaging-21.3.dist-info/RECORD,,
|
|
20
|
+
packaging-21.3.pex-info/original-whl-info.json,sha256=cHaQy2j4tTYmpq7kGSoHe5O1p3G4rSedLZ5ByxG_2zw,1244
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"entries":[["packaging/__about__.py",[2021,11,18,0,38,54],2175008768],["packaging/__init__.py",[2021,2,12,20,13,2],2175008768],["packaging/_manylinux.py",[2021,7,1,21,38,24],2175008768],["packaging/_musllinux.py",[2021,11,16,16,25,30],2175008768],["packaging/_structures.py",[2021,11,16,16,25,30],2175008768],["packaging/markers.py",[2021,2,12,20,13,2],2175008768],["packaging/py.typed",[2019,11,8,18,53,20],2175008768],["packaging/requirements.py",[2021,2,12,20,13,2],2175008768],["packaging/specifiers.py",[2021,11,16,16,25,30],2175008768],["packaging/tags.py",[2021,11,16,16,25,30],2175008768],["packaging/utils.py",[2021,6,19,18,45,38],2175008768],["packaging/version.py",[2021,2,12,20,13,2],2175008768],["packaging-21.3.dist-info/LICENSE",[2021,11,18,0,39,0],2175008768],["packaging-21.3.dist-info/LICENSE.APACHE",[2021,11,18,0,39,0],2175008768],["packaging-21.3.dist-info/LICENSE.BSD",[2021,11,18,0,39,0],2175008768],["packaging-21.3.dist-info/METADATA",[2021,11,18,0,39,0],2175008768],["packaging-21.3.dist-info/WHEEL",[2021,11,18,0,39,0],2175008768],["packaging-21.3.dist-info/top_level.txt",[2021,11,18,0,39,0],2175008768],["packaging-21.3.dist-info/RECORD",[2021,11,18,0,39,0],28573696]],"filename":"packaging-21.3-py3-none-any.whl"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
pyparsing/__init__.py,sha256=EguTHn-CBY6m15vm0jKxaGHdLgqIt7nwCIkVwbOfSbM,9095
|
|
2
|
+
pyparsing/actions.py,sha256=60v7mETOBzc01YPH_qQD5isavgcSJpAfIKpzgjM3vaU,6429
|
|
3
|
+
pyparsing/common.py,sha256=lFL97ooIeR75CmW5hjURZqwDCTgruqltcTCZ-ulLO2Q,12936
|
|
4
|
+
pyparsing/core.py,sha256=KQEemy1LU-uwf_8MRB-NhGqcSvW8iJqgYky2Ez5KmkI,212214
|
|
5
|
+
pyparsing/exceptions.py,sha256=H4D9gqMavqmAFSsdrU_J6bO-jA-T-A7yvtXWZpooIUA,9030
|
|
6
|
+
pyparsing/helpers.py,sha256=kqpIZFG-y0fQ3g_TmloYllo9we6YCYiewZMXIK0y5wc,38299
|
|
7
|
+
pyparsing/results.py,sha256=4D-oURF1cLeL7k0d3zMqUuWH_gTjop_OrZwik9O0HXU,25339
|
|
8
|
+
pyparsing/testing.py,sha256=szs8AKZREZMhL0y0vsMfaTVAnpqPHetg6VKJBNmc4QY,13388
|
|
9
|
+
pyparsing/unicode.py,sha256=IR-ioeGY29cZ49tG8Ts7ITPWWNP5G2DcZs58oa8zn44,10381
|
|
10
|
+
pyparsing/util.py,sha256=kq772O5YSeXOSdP-M31EWpbH_ayj7BMHImBYo9xPD5M,6805
|
|
11
|
+
pyparsing/diagram/__init__.py,sha256=HgXKfDWj11krDF6LhpP5pXPxjMT63M8G46rAOnn816w,22450
|
|
12
|
+
pyparsing/diagram/template.jinja2,sha256=SfQ8SLktSBqI5W1DGcUVH1vdflRD6x2sQBApxrcNg7s,589
|
|
13
|
+
pyparsing-3.0.7.dist-info/LICENSE,sha256=ENUSChaAWAT_2otojCIL-06POXQbVzIGBNRVowngGXI,1023
|
|
14
|
+
pyparsing-3.0.7.dist-info/METADATA,sha256=w1anBp3KPsXUNknLll-Sg-kL-qPowO-djCrONTvVkHA,4205
|
|
15
|
+
pyparsing-3.0.7.dist-info/WHEEL,sha256=OqRkF0eY5GHssMorFjlbTIq072vpHpF60fIQA6lS9xA,92
|
|
16
|
+
pyparsing-3.0.7.dist-info/top_level.txt,sha256=eUOjGzJVhlQ3WS2rFAy2mN3LX_7FKTM5GSJ04jfnLmU,10
|
|
17
|
+
pyparsing-3.0.7.dist-info/RECORD,,
|
|
18
|
+
pyparsing-3.0.7.pex-info/original-whl-info.json,sha256=hznFZyN7QJXBMZBH1g49eG-efp3XOqD08pLrRvX2Ibo,1103
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"entries":[["pyparsing/__init__.py",[2022,1,20,22,11,34],2176057344],["pyparsing/actions.py",[2021,10,2,5,27,50],2176057344],["pyparsing/common.py",[2021,10,23,2,39,52],2176057344],["pyparsing/core.py",[2022,1,20,22,11,34],2176057344],["pyparsing/exceptions.py",[2021,11,7,17,32,54],2176057344],["pyparsing/helpers.py",[2022,1,20,22,11,34],2176057344],["pyparsing/results.py",[2022,1,20,22,11,34],2176057344],["pyparsing/testing.py",[2021,10,30,8,26,30],2176057344],["pyparsing/unicode.py",[2022,1,20,22,11,34],2176057344],["pyparsing/util.py",[2022,1,20,22,11,34],2176057344],["pyparsing/diagram/__init__.py",[2021,10,30,8,26,30],2176057344],["pyparsing/diagram/template.jinja2",[2020,12,23,3,53,56],2176057344],["pyparsing-3.0.7.dist-info/LICENSE",[2022,1,21,4,9,38],2176057344],["pyparsing-3.0.7.dist-info/METADATA",[2022,1,21,4,9,38],2176057344],["pyparsing-3.0.7.dist-info/WHEEL",[2022,1,21,4,9,38],2176057344],["pyparsing-3.0.7.dist-info/top_level.txt",[2022,1,21,4,9,38],2176057344],["pyparsing-3.0.7.dist-info/RECORD",[2022,1,21,4,9,38],28573696]],"filename":"pyparsing-3.0.7-py3-none-any.whl"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fingerprint":
|
|
1
|
+
{"fingerprint":"2688e613bb54c0b61a1c101acb2aa489d06d2c524bfc9502c56768eedeb2f6eb","record_relpath":"packaging-24.0.dist-info/RECORD","root_is_purelib":true,"stash_dir":".prefix","sys_path_entries":["."]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
packaging/__init__.py,sha256=UzotcV07p8vcJzd80S-W0srhgY8NMVD_XvJcZ7JN-tA,496
|
|
2
|
+
packaging/_elffile.py,sha256=hbmK8OD6Z7fY6hwinHEUcD1by7czkGiNYu7ShnFEk2k,3266
|
|
3
|
+
packaging/_manylinux.py,sha256=1ng_TqyH49hY6s3W_zVHyoJIaogbJqbIF1jJ0fAehc4,9590
|
|
4
|
+
packaging/_musllinux.py,sha256=kgmBGLFybpy8609-KTvzmt2zChCPWYvhp5BWP4JX7dE,2676
|
|
5
|
+
packaging/_parser.py,sha256=zlsFB1FpMRjkUdQb6WLq7xON52ruQadxFpYsDXWhLb4,10347
|
|
6
|
+
packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431
|
|
7
|
+
packaging/_tokenizer.py,sha256=alCtbwXhOFAmFGZ6BQ-wCTSFoRAJ2z-ysIf7__MTJ_k,5292
|
|
8
|
+
packaging/markers.py,sha256=eH-txS2zq1HdNpTd9LcZUcVIwewAiNU0grmq5wjKnOk,8208
|
|
9
|
+
packaging/metadata.py,sha256=w7jPEg6mDf1FTZMn79aFxFuk4SKtynUJtxr2InTxlV4,33036
|
|
10
|
+
packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
packaging/requirements.py,sha256=dgoBeVprPu2YE6Q8nGfwOPTjATHbRa_ZGLyXhFEln6Q,2933
|
|
12
|
+
packaging/specifiers.py,sha256=dB2DwbmvSbEuVilEyiIQ382YfW5JfwzXTfRRPVtaENY,39784
|
|
13
|
+
packaging/tags.py,sha256=fedHXiOHkBxNZTXotXv8uXPmMFU9ae-TKBujgYHigcA,18950
|
|
14
|
+
packaging/utils.py,sha256=XgdmP3yx9-wQEFjO7OvMj9RjEf5JlR5HFFR69v7SQ9E,5268
|
|
15
|
+
packaging/version.py,sha256=XjRBLNK17UMDgLeP8UHnqwiY3TdSi03xFQURtec211A,16236
|
|
16
|
+
packaging-24.0.dist-info/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197
|
|
17
|
+
packaging-24.0.dist-info/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
|
|
18
|
+
packaging-24.0.dist-info/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344
|
|
19
|
+
packaging-24.0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
|
20
|
+
packaging-24.0.dist-info/METADATA,sha256=0dESdhY_wHValuOrbgdebiEw04EbX4dkujlxPdEsFus,3203
|
|
21
|
+
packaging-24.0.dist-info/RECORD,,
|
|
22
|
+
packaging-24.0.pex-info/original-whl-info.json,sha256=Lo36t6W9UqFYPvWib0F-dHl5YKZzvKJxlUOOECsWWMM,1328
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"entries":[["packaging/__init__.py",[2024,3,10,9,38,56],2175008768],["packaging/_elffile.py",[2023,1,30,15,29,48],2175008768],["packaging/_manylinux.py",[2024,3,10,9,34,40],2175008768],["packaging/_musllinux.py",[2023,10,1,13,58,58],2175008768],["packaging/_parser.py",[2024,3,10,9,34,40],2175008768],["packaging/_structures.py",[2023,1,30,15,29,48],2175008768],["packaging/_tokenizer.py",[2023,4,12,17,5,6],2175008768],["packaging/markers.py",[2023,4,12,17,5,28],2175008768],["packaging/metadata.py",[2024,1,6,20,39,22],2175008768],["packaging/py.typed",[2023,1,30,15,29,48],2175008768],["packaging/requirements.py",[2024,3,10,9,34,40],2175008768],["packaging/specifiers.py",[2024,3,10,9,34,40],2175008768],["packaging/tags.py",[2024,1,6,20,39,22],2175008768],["packaging/utils.py",[2023,10,1,13,58,58],2175008768],["packaging/version.py",[2023,10,1,13,58,58],2175008768],["packaging-24.0.dist-info/LICENSE",[2021,7,23,8,28,26],2175008768],["packaging-24.0.dist-info/LICENSE.APACHE",[2021,7,23,8,28,26],2175008768],["packaging-24.0.dist-info/LICENSE.BSD",[2021,7,23,8,28,26],2175008768],["packaging-24.0.dist-info/WHEEL",[2016,1,1,0,0,0],2175008768],["packaging-24.0.dist-info/METADATA",[2016,1,1,0,0,0],2175008768],["packaging-24.0.dist-info/RECORD",[2016,1,1,0,0,0],2175008768]],"filename":"packaging-24.0-py3-none-any.whl"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fingerprint":
|
|
1
|
+
{"fingerprint":"c042647020954d0559e1bc7ae62bb4c2e5d6c586504b564a397a16b1fabd5f96","record_relpath":"packaging-25.0.dist-info/RECORD","root_is_purelib":true,"stash_dir":".prefix","sys_path_entries":["."]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
packaging/__init__.py,sha256=_0cDiPVf2S-bNfVmZguxxzmrIYWlyASxpqph4qsJWUc,494
|
|
2
|
+
packaging/_elffile.py,sha256=UkrbDtW7aeq3qqoAfU16ojyHZ1xsTvGke_WqMTKAKd0,3286
|
|
3
|
+
packaging/_manylinux.py,sha256=t4y_-dTOcfr36gLY-ztiOpxxJFGO2ikC11HgfysGxiM,9596
|
|
4
|
+
packaging/_musllinux.py,sha256=p9ZqNYiOItGee8KcZFeHF_YcdhVwGHdK6r-8lgixvGQ,2694
|
|
5
|
+
packaging/_parser.py,sha256=gYfnj0pRHflVc4RHZit13KNTyN9iiVcU2RUCGi22BwM,10221
|
|
6
|
+
packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431
|
|
7
|
+
packaging/_tokenizer.py,sha256=OYzt7qKxylOAJ-q0XyK1qAycyPRYLfMPdGQKRXkZWyI,5310
|
|
8
|
+
packaging/markers.py,sha256=P0we27jm1xUzgGMJxBjtUFCIWeBxTsMeJTOJ6chZmAY,12049
|
|
9
|
+
packaging/metadata.py,sha256=8IZErqQQnNm53dZZuYq4FGU4_dpyinMeH1QFBIWIkfE,34739
|
|
10
|
+
packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
packaging/requirements.py,sha256=gYyRSAdbrIyKDY66ugIDUQjRMvxkH2ALioTmX3tnL6o,2947
|
|
12
|
+
packaging/specifiers.py,sha256=gtPu5DTc-F9baLq3FTGEK6dPhHGCuwwZetaY0PSV2gs,40055
|
|
13
|
+
packaging/tags.py,sha256=41s97W9Zatrq2Ed7Rc3qeBDaHe8pKKvYq2mGjwahfXk,22745
|
|
14
|
+
packaging/utils.py,sha256=0F3Hh9OFuRgrhTgGZUl5K22Fv1YP2tZl1z_2gO6kJiA,5050
|
|
15
|
+
packaging/version.py,sha256=olfyuk_DPbflNkJ4wBWetXQ17c74x3DB501degUv7DY,16676
|
|
16
|
+
packaging/licenses/__init__.py,sha256=mMl06HTXljKnwrshid3C9pSh_5lSDsx2ArhVR66m1iI,5893
|
|
17
|
+
packaging/licenses/_spdx.py,sha256=oAm1ztPFwlsmCKe7lAAsv_OIOfS1cWDu9bNBkeu-2ns,48398
|
|
18
|
+
packaging-25.0.dist-info/licenses/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197
|
|
19
|
+
packaging-25.0.dist-info/licenses/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
|
|
20
|
+
packaging-25.0.dist-info/licenses/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344
|
|
21
|
+
packaging-25.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
22
|
+
packaging-25.0.dist-info/METADATA,sha256=W2EaYJw4_vw9YWv0XSCuyY-31T8kXayp4sMPyFx6woI,3281
|
|
23
|
+
packaging-25.0.dist-info/RECORD,,
|
|
24
|
+
packaging-25.0.pex-info/original-whl-info.json,sha256=uXOqEQcWzymvMM-zwg1pqwsx2d6SLLvxcQIEHu9DShI,1490
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"entries":[["packaging/__init__.py",[2025,4,19,12,48,36],2175008768],["packaging/_elffile.py",[2025,4,19,12,45,16],2175008768],["packaging/_manylinux.py",[2025,4,19,12,45,16],2175008768],["packaging/_musllinux.py",[2024,6,10,0,16,42],2175008768],["packaging/_parser.py",[2025,4,19,12,45,16],2175008768],["packaging/_structures.py",[2024,3,10,10,7,16],2175008768],["packaging/_tokenizer.py",[2025,4,19,12,45,16],2175008768],["packaging/markers.py",[2025,4,19,12,45,16],2175008768],["packaging/metadata.py",[2025,4,19,12,45,16],2175008768],["packaging/py.typed",[2023,1,30,15,29,48],2175008768],["packaging/requirements.py",[2024,6,10,0,16,42],2175008768],["packaging/specifiers.py",[2025,4,19,12,45,16],2175008768],["packaging/tags.py",[2025,4,19,12,45,16],2175008768],["packaging/utils.py",[2024,11,8,9,41,38],2175008768],["packaging/version.py",[2024,11,8,9,41,38],2175008768],["packaging/licenses/__init__.py",[2025,4,19,12,45,16],2175008768],["packaging/licenses/_spdx.py",[2024,11,8,9,41,38],2175008768],["packaging-25.0.dist-info/licenses/LICENSE",[2021,7,23,8,28,26],2175008768],["packaging-25.0.dist-info/licenses/LICENSE.APACHE",[2021,7,23,8,28,26],2175008768],["packaging-25.0.dist-info/licenses/LICENSE.BSD",[2021,7,23,8,28,26],2175008768],["packaging-25.0.dist-info/WHEEL",[2016,1,1,0,0,0],2175008768],["packaging-25.0.dist-info/METADATA",[2016,1,1,0,0,0],2175008768],["packaging-25.0.dist-info/RECORD",[2016,1,1,0,0,0],2175008768]],"filename":"packaging-25.0-py3-none-any.whl"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fingerprint":
|
|
1
|
+
{"fingerprint":"93065fed46b0a0db8737c4a33aa24819d527ace9c84e9cdb8f9e41e9e2bd926a","record_relpath":"pip-20.3.4.dist-info/RECORD","root_is_purelib":true,"stash_dir":".prefix","sys_path_entries":["."]}
|