packaging
Advanced tools
| This software is made available under the terms of *either* of the licenses | ||
| found in LICENSE.APACHE or LICENSE.BSD. Contributions to this software is made | ||
| under the terms of *both* these licenses. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
| Metadata-Version: 2.4 | ||
| Name: packaging | ||
| Version: 26.2 | ||
| Summary: Core utilities for Python packages | ||
| Author-email: Donald Stufft <donald@stufft.io> | ||
| Requires-Python: >=3.8 | ||
| Description-Content-Type: text/x-rst | ||
| License-Expression: Apache-2.0 OR BSD-2-Clause | ||
| Classifier: Development Status :: 5 - Production/Stable | ||
| Classifier: Intended Audience :: Developers | ||
| Classifier: Programming Language :: Python | ||
| Classifier: Programming Language :: Python :: 3 | ||
| Classifier: Programming Language :: Python :: 3 :: Only | ||
| Classifier: Programming Language :: Python :: 3.8 | ||
| Classifier: Programming Language :: Python :: 3.9 | ||
| Classifier: Programming Language :: Python :: 3.10 | ||
| Classifier: Programming Language :: Python :: 3.11 | ||
| Classifier: Programming Language :: Python :: 3.12 | ||
| Classifier: Programming Language :: Python :: 3.13 | ||
| Classifier: Programming Language :: Python :: 3.14 | ||
| Classifier: Programming Language :: Python :: Implementation :: CPython | ||
| Classifier: Programming Language :: Python :: Implementation :: PyPy | ||
| Classifier: Programming Language :: Python :: Free Threading :: 4 - Resilient | ||
| Classifier: Typing :: Typed | ||
| License-File: LICENSE | ||
| License-File: LICENSE.APACHE | ||
| License-File: LICENSE.BSD | ||
| Project-URL: Documentation, https://packaging.pypa.io/ | ||
| Project-URL: Source, https://github.com/pypa/packaging | ||
| packaging | ||
| ========= | ||
| .. start-intro | ||
| Reusable core utilities for various Python Packaging | ||
| `interoperability specifications <https://packaging.python.org/specifications/>`_. | ||
| This library provides utilities that implement the interoperability | ||
| specifications which have clearly one correct behaviour (eg: :pep:`440`) | ||
| or benefit greatly from having a single shared implementation (eg: :pep:`425`). | ||
| .. end-intro | ||
| The ``packaging`` project includes the following: version handling, specifiers, | ||
| markers, requirements, tags, metadata, lockfiles, utilities. | ||
| Documentation | ||
| ------------- | ||
| The `documentation`_ provides information and the API for the following: | ||
| - Version Handling | ||
| - Specifiers | ||
| - Markers | ||
| - Licenses | ||
| - Requirements | ||
| - Metadata | ||
| - Tags | ||
| - Lockfiles (pylock) | ||
| - Direct URL helpers | ||
| - Dependency groups | ||
| - Errors | ||
| - Utilities | ||
| Installation | ||
| ------------ | ||
| Use ``pip`` to install these utilities:: | ||
| pip install packaging | ||
| The ``packaging`` library uses calendar-based versioning (``YY.N``). | ||
| Discussion | ||
| ---------- | ||
| If you run into bugs, you can file them in our `issue tracker`_. | ||
| You can also join discussions on `GitHub Discussions`_ to ask questions or get involved. | ||
| .. _`documentation`: https://packaging.pypa.io/ | ||
| .. _`issue tracker`: https://github.com/pypa/packaging/issues | ||
| .. _`GitHub Discussions`: https://github.com/pypa/packaging/discussions | ||
| Code of Conduct | ||
| --------------- | ||
| Everyone interacting in the packaging project's codebases, issue trackers, chat | ||
| rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_. | ||
| .. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md | ||
| Contributing | ||
| ------------ | ||
| The ``CONTRIBUTING.rst`` file outlines how to contribute to this project as | ||
| well as how to report a potential security issue. The documentation for this | ||
| project also covers information about `project development`_ and `security`_. | ||
| .. _`project development`: https://packaging.pypa.io/en/latest/development/ | ||
| .. _`security`: https://packaging.pypa.io/en/latest/security/ | ||
| Project History | ||
| --------------- | ||
| Please review the ``CHANGELOG.rst`` file or the `Changelog documentation`_ for | ||
| recent changes and project history. | ||
| .. _`Changelog documentation`: https://packaging.pypa.io/en/latest/changelog/ | ||
| packaging/__init__.py,sha256=QhMEdPu2XogrJzV3S0KWS6t7l0I9k8EeDRJl4fnw87s,494 | ||
| packaging/_elffile.py,sha256=-sKkptYqzYw2-x3QByJa5mB4rfPWu1pxkZHRx1WAFCY,3211 | ||
| packaging/_manylinux.py,sha256=Hf6nB0cOrayEs96-p3oIXAgGnFquv20DO5l-o2_Xnv0,9559 | ||
| packaging/_musllinux.py,sha256=Z6swjH3MA7XS3qXnmMN7QPhqP3fnoYI0eQ18e9-HgAE,2707 | ||
| packaging/_parser.py,sha256=Kf2nsDw4c54X82pY8ba4F02Bve6OygGMAjL-Begqcew,11698 | ||
| packaging/_structures.py,sha256=60jRbF78p8z5MKnNd6cAprgOadCJHV0DlmUmRBqFZcs,1109 | ||
| packaging/_tokenizer.py,sha256=tFU2Wr-ZZJdAbkXLEJo7qUQDJaIkfft9DqaifiEND7A,5391 | ||
| packaging/dependency_groups.py,sha256=XZIAVFK9uHG4RCGprmJn3VInUWMesxha_kytJuMO9eY,10218 | ||
| packaging/direct_url.py,sha256=eKmbDiPP1sLV4Mj_kCSZqqknrIyVO9Sr7JpF8KCjp4U,10917 | ||
| packaging/errors.py,sha256=6hfEYXAf8v_IF65-lFadJOMIieBP2xIKtyEXjG1nGIs,2680 | ||
| packaging/markers.py,sha256=8fDIUhAF6YMnCNB5FSiwh9pEIusiFzAF73J-0OB8bTk,17055 | ||
| packaging/metadata.py,sha256=crAh0E3GVGVqPlu6EdRFsaG-Y6UYznTUqjuGKRGPv6c,38770 | ||
| packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 | ||
| packaging/pylock.py,sha256=G_1gncTmDbRLY1jo4VDI9Uw-b5IErh_Q9V_BbVJTmD8,33890 | ||
| packaging/requirements.py,sha256=dd1c9aa1gp5NI6btF6UFRQjPn1nxQXnE_T34yDDTEpc,4383 | ||
| packaging/specifiers.py,sha256=Mfp8avQg0lVot17to9lVKBtZD1FsWBTItoGwFUZ3wtg,71514 | ||
| packaging/tags.py,sha256=NQ1weo69_Sjte3xBZ1I_G63CIgCmaN0C24mz-z3hGYo,34224 | ||
| packaging/utils.py,sha256=M7-JMKic2sP1YtV_8aW7eVGB-x3ADuKCiSrsVeCd2Uo,9848 | ||
| packaging/version.py,sha256=Y1aTtxe3sn2xOMa5BdI85-AcHuybbanOVkEvvSRRC8I,38369 | ||
| packaging/licenses/__init__.py,sha256=_Jx0XRiD_58palsWnyLrLuh59ZpGCPIPXLKdZo9OJvQ,7293 | ||
| packaging/licenses/_spdx.py,sha256=WW7DXiyg68up_YND_wpRYlr1SHhiV4FfJLQffghhMxQ,51122 | ||
| packaging-26.2.dist-info/licenses/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197 | ||
| packaging-26.2.dist-info/licenses/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174 | ||
| packaging-26.2.dist-info/licenses/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344 | ||
| packaging-26.2.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82 | ||
| packaging-26.2.dist-info/METADATA,sha256=T5y815M0FaR5P3dnyYoralEsgj_IHIczeBVwXyMOyr8,3543 | ||
| packaging-26.2.dist-info/RECORD,, |
| Wheel-Version: 1.0 | ||
| Generator: flit 3.12.0 | ||
| Root-Is-Purelib: true | ||
| Tag: py3-none-any |
| # This file is dual licensed under the terms of the Apache License, Version | ||
| # 2.0, and the BSD License. See the LICENSE file in the root of this repository | ||
| # for complete details. | ||
| """Backward-compatibility shim for unpickling Version objects serialized before | ||
| packaging 26.1. | ||
| Old pickles reference ``packaging._structures.InfinityType`` and | ||
| ``packaging._structures.NegativeInfinityType``. This module provides minimal | ||
| stand-in classes so that ``pickle.loads()`` can resolve those references. | ||
| The deserialized objects are not used for comparisons — ``Version.__setstate__`` | ||
| discards the stale ``_key`` cache and recomputes it from the core version fields. | ||
| """ | ||
| from __future__ import annotations | ||
| class InfinityType: | ||
| """Stand-in for the removed ``InfinityType`` used in old comparison keys.""" | ||
| def __repr__(self) -> str: | ||
| return "Infinity" | ||
| class NegativeInfinityType: | ||
| """Stand-in for the removed ``NegativeInfinityType`` used in old comparison keys.""" | ||
| def __repr__(self) -> str: | ||
| return "-Infinity" | ||
| Infinity = InfinityType() | ||
| NegativeInfinity = NegativeInfinityType() |
@@ -9,3 +9,3 @@ # This file is dual licensed under the terms of the Apache License, Version | ||
| __version__ = "26.1" | ||
| __version__ = "26.2" | ||
@@ -12,0 +12,0 @@ __author__ = "Donald Stufft and individual contributors" |
+28
-0
@@ -30,3 +30,31 @@ """Handwritten parser of dependency specifiers. | ||
| def __getstate__(self) -> str: | ||
| # Return just the value string for compactness and stability. | ||
| return self.value | ||
| def _restore_value(self, value: object) -> None: | ||
| if not isinstance(value, str): | ||
| raise TypeError( | ||
| f"Cannot restore {self.__class__.__name__} value from {value!r}" | ||
| ) | ||
| self.value = value | ||
| def __setstate__(self, state: object) -> None: | ||
| if isinstance(state, str): | ||
| # New format (26.2+): just the value string. | ||
| self._restore_value(state) | ||
| return | ||
| if isinstance(state, tuple) and len(state) == 2: | ||
| # Old format (packaging <= 26.0, __slots__): (None, {slot: value}). | ||
| _, slot_dict = state | ||
| if isinstance(slot_dict, dict) and "value" in slot_dict: | ||
| self._restore_value(slot_dict["value"]) | ||
| return | ||
| if isinstance(state, dict) and "value" in state: | ||
| # Old format (packaging <= 25.0, no __slots__): plain __dict__. | ||
| self._restore_value(state["value"]) | ||
| return | ||
| raise TypeError(f"Cannot restore {self.__class__.__name__} from {state!r}") | ||
| class Variable(Node): | ||
@@ -33,0 +61,0 @@ __slots__ = () |
+39
-0
@@ -325,2 +325,12 @@ # This file is dual licensed under the terms of the Apache License, Version | ||
| :raises InvalidMarker: If ``marker`` cannot be parsed. | ||
| Instances are safe to serialize with :mod:`pickle`. They use a stable | ||
| format so the same pickle can be loaded in future packaging releases. | ||
| .. versionchanged:: 26.2 | ||
| Added a stable pickle format. Pickles created with packaging 26.2+ can | ||
| be unpickled with future releases. Backward compatibility with pickles | ||
| from packaging < 26.2 is supported but may be removed in a future | ||
| release. | ||
| """ | ||
@@ -385,2 +395,31 @@ | ||
| def __getstate__(self) -> str: | ||
| # Return the marker expression string for compactness and stability. | ||
| # Internal Node objects are excluded; the string is re-parsed on load. | ||
| return str(self) | ||
| def __setstate__(self, state: object) -> None: | ||
| if isinstance(state, str): | ||
| # New format (26.2+): just the marker expression string. | ||
| try: | ||
| self._markers = _normalize_extra_values(_parse_marker(state)) | ||
| except ParserSyntaxError as exc: | ||
| raise TypeError(f"Cannot restore Marker from {state!r}") from exc | ||
| return | ||
| if isinstance(state, dict) and "_markers" in state: | ||
| # Old format (packaging <= 26.1, no __slots__): plain __dict__. | ||
| markers = state["_markers"] | ||
| if isinstance(markers, list): | ||
| self._markers = markers | ||
| return | ||
| if isinstance(state, tuple) and len(state) == 2: | ||
| # Old format (packaging <= 26.1, __slots__): (None, {slot: value}). | ||
| _, slot_dict = state | ||
| if isinstance(slot_dict, dict) and "_markers" in slot_dict: | ||
| markers = slot_dict["_markers"] | ||
| if isinstance(markers, list): | ||
| self._markers = markers | ||
| return | ||
| raise TypeError(f"Cannot restore Marker from {state!r}") | ||
| def __and__(self, other: Marker) -> Marker: | ||
@@ -387,0 +426,0 @@ if not isinstance(other, Marker): |
@@ -30,2 +30,3 @@ from __future__ import annotations | ||
| __all__ = [ | ||
| "ExceptionGroup", # Keep this for a bit (makes mypy happy w/ 26.0 compat) | ||
| "InvalidMetadata", | ||
@@ -32,0 +33,0 @@ "Metadata", |
@@ -36,2 +36,12 @@ # This file is dual licensed under the terms of the Apache License, Version | ||
| string. | ||
| Instances are safe to serialize with :mod:`pickle`. They use a stable | ||
| format so the same pickle can be loaded in future packaging releases. | ||
| .. versionchanged:: 26.2 | ||
| Added a stable pickle format. Pickles created with packaging 26.2+ can | ||
| be unpickled with future releases. Backward compatibility with pickles | ||
| from packaging < 26.2 is supported but may be removed in a future | ||
| release. | ||
| """ | ||
@@ -77,2 +87,26 @@ | ||
| def __getstate__(self) -> str: | ||
| # Return the requirement string for compactness and stability. | ||
| # Re-parsed on load to reconstruct all fields. | ||
| return str(self) | ||
| def __setstate__(self, state: object) -> None: | ||
| if isinstance(state, str): | ||
| # New format (26.2+): just the requirement string. | ||
| try: | ||
| tmp = Requirement(state) | ||
| except InvalidRequirement as exc: | ||
| raise TypeError(f"Cannot restore Requirement from {state!r}") from exc | ||
| self.name = tmp.name | ||
| self.url = tmp.url | ||
| self.extras = tmp.extras | ||
| self.specifier = tmp.specifier | ||
| self.marker = tmp.marker | ||
| return | ||
| if isinstance(state, dict): | ||
| # Old format (packaging <= 26.1, no __slots__): plain __dict__. | ||
| self.__dict__.update(state) | ||
| return | ||
| raise TypeError(f"Cannot restore Requirement from {state!r}") | ||
| def __str__(self) -> str: | ||
@@ -79,0 +113,0 @@ return "".join(self._iter_parts(self.name)) |
+46
-10
@@ -18,3 +18,2 @@ # This file is dual licensed under the terms of the Apache License, Version | ||
| TYPE_CHECKING, | ||
| Any, | ||
| Iterable, | ||
@@ -96,2 +95,12 @@ Iterator, | ||
| is also supported. | ||
| Instances are safe to serialize with :mod:`pickle`. They use a stable | ||
| format so the same pickle can be loaded in future packaging releases. | ||
| .. versionchanged:: 26.2 | ||
| Added a stable pickle format. Pickles created with packaging 26.2+ can | ||
| be unpickled with future releases. Backward compatibility with pickles | ||
| from packaging < 26.2 is supported but may be removed in a future | ||
| release. | ||
| """ | ||
@@ -163,10 +172,35 @@ | ||
| def __setstate__(self, state: tuple[None, dict[str, Any]]) -> None: | ||
| # The cached _hash is wrong when unpickling. | ||
| _, slots = state | ||
| for k, v in slots.items(): | ||
| setattr(self, k, v) | ||
| self._hash = hash((self._interpreter, self._abi, self._platform)) | ||
| def __getstate__(self) -> tuple[str, str, str]: | ||
| # Return state as a 3-item tuple: (interpreter, abi, platform). | ||
| # Cache member _hash is excluded and will be recomputed. | ||
| return (self._interpreter, self._abi, self._platform) | ||
| def __setstate__(self, state: object) -> None: | ||
| if isinstance(state, tuple): | ||
| if len(state) == 3 and all(isinstance(s, str) for s in state): | ||
| # New format (26.2+): (interpreter, abi, platform) | ||
| self._interpreter, self._abi, self._platform = state | ||
| self._hash = hash((self._interpreter, self._abi, self._platform)) | ||
| return | ||
| if len(state) == 2 and isinstance(state[1], dict): | ||
| # Old format (packaging <= 26.1, __slots__): (None, {slot: value}). | ||
| _, slots = state | ||
| try: | ||
| interpreter = slots["_interpreter"] | ||
| abi = slots["_abi"] | ||
| platform = slots["_platform"] | ||
| except KeyError: | ||
| raise TypeError(f"Cannot restore Tag from {state!r}") from None | ||
| if not all( | ||
| isinstance(value, str) for value in (interpreter, abi, platform) | ||
| ): | ||
| raise TypeError(f"Cannot restore Tag from {state!r}") | ||
| self._interpreter = interpreter.lower() | ||
| self._abi = abi.lower() | ||
| self._platform = platform.lower() | ||
| self._hash = hash((self._interpreter, self._abi, self._platform)) | ||
| return | ||
| raise TypeError(f"Cannot restore Tag from {state!r}") | ||
| def parse_tag(tag: str, *, validate_order: bool = False) -> frozenset[Tag]: | ||
@@ -755,5 +789,7 @@ """ | ||
| def _emscripten_platforms() -> Iterator[str]: | ||
| pyemscripten_abi_version = sysconfig.get_config_var("PYEMSCRIPTEN_ABI_VERSION") | ||
| if pyemscripten_abi_version: | ||
| yield f"pyemscripten_{pyemscripten_abi_version}_wasm32" | ||
| pyemscripten_platform_version = sysconfig.get_config_var( | ||
| "PYEMSCRIPTEN_PLATFORM_VERSION" | ||
| ) | ||
| if pyemscripten_platform_version: | ||
| yield f"pyemscripten_{pyemscripten_platform_version}_wasm32" | ||
| yield from _generic_platforms() | ||
@@ -760,0 +796,0 @@ |
+77
-0
@@ -361,2 +361,12 @@ # This file is dual licensed under the terms of the Apache License, Version | ||
| part of a version. | ||
| Instances are safe to serialize with :mod:`pickle`. They use a stable | ||
| format so the same pickle can be loaded in future packaging releases. | ||
| .. versionchanged:: 26.2 | ||
| Added a stable pickle format. Pickles created with packaging 26.2+ can | ||
| be unpickled with future releases. Backward compatibility with pickles | ||
| from packaging < 26.2 is supported but may be removed in a future | ||
| release. | ||
| """ | ||
@@ -745,2 +755,69 @@ | ||
| def __getstate__( | ||
| self, | ||
| ) -> tuple[ | ||
| int, | ||
| tuple[int, ...], | ||
| tuple[str, int] | None, | ||
| tuple[str, int] | None, | ||
| tuple[str, int] | None, | ||
| LocalType | None, | ||
| ]: | ||
| # Return state as a 6-item tuple for compactness: | ||
| # (epoch, release, pre, post, dev, local) | ||
| # Cache members are excluded and will be recomputed on demand | ||
| return ( | ||
| self._epoch, | ||
| self._release, | ||
| self._pre, | ||
| self._post, | ||
| self._dev, | ||
| self._local, | ||
| ) | ||
| def __setstate__(self, state: object) -> None: | ||
| # Always discard cached values — they may contain stale references | ||
| # (e.g. packaging._structures.InfinityType from pre-26.1 pickles) | ||
| # and will be recomputed on demand from the core fields above. | ||
| self._key_cache = None | ||
| self._hash_cache = None | ||
| if isinstance(state, tuple): | ||
| if len(state) == 6: | ||
| # New format (26.2+): (epoch, release, pre, post, dev, local) | ||
| ( | ||
| self._epoch, | ||
| self._release, | ||
| self._pre, | ||
| self._post, | ||
| self._dev, | ||
| self._local, | ||
| ) = state | ||
| return | ||
| if len(state) == 2: | ||
| # Format (packaging 26.0-26.1): (None, {slot: value}). | ||
| _, slot_dict = state | ||
| if isinstance(slot_dict, dict): | ||
| self._epoch = slot_dict["_epoch"] | ||
| self._release = slot_dict["_release"] | ||
| self._pre = slot_dict.get("_pre") | ||
| self._post = slot_dict.get("_post") | ||
| self._dev = slot_dict.get("_dev") | ||
| self._local = slot_dict.get("_local") | ||
| return | ||
| if isinstance(state, dict): | ||
| # Old format (packaging <= 25.x, no __slots__): state is a plain | ||
| # dict with "_version" (_Version NamedTuple) and "_key" entries. | ||
| version_nt = state.get("_version") | ||
| if version_nt is not None: | ||
| self._epoch = version_nt.epoch | ||
| self._release = version_nt.release | ||
| self._pre = version_nt.pre | ||
| self._post = version_nt.post | ||
| self._dev = version_nt.dev | ||
| self._local = version_nt.local | ||
| return | ||
| raise TypeError(f"Cannot restore Version from {state!r}") | ||
| @property | ||
@@ -747,0 +824,0 @@ @_deprecated("Version._version is private and will be removed soon") |
| This software is made available under the terms of *either* of the licenses | ||
| found in LICENSE.APACHE or LICENSE.BSD. Contributions to this software is made | ||
| under the terms of *both* these licenses. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
| Metadata-Version: 2.4 | ||
| Name: packaging | ||
| Version: 26.1 | ||
| Summary: Core utilities for Python packages | ||
| Author-email: Donald Stufft <donald@stufft.io> | ||
| Requires-Python: >=3.8 | ||
| Description-Content-Type: text/x-rst | ||
| License-Expression: Apache-2.0 OR BSD-2-Clause | ||
| Classifier: Development Status :: 5 - Production/Stable | ||
| Classifier: Intended Audience :: Developers | ||
| Classifier: Programming Language :: Python | ||
| Classifier: Programming Language :: Python :: 3 | ||
| Classifier: Programming Language :: Python :: 3 :: Only | ||
| Classifier: Programming Language :: Python :: 3.8 | ||
| Classifier: Programming Language :: Python :: 3.9 | ||
| Classifier: Programming Language :: Python :: 3.10 | ||
| Classifier: Programming Language :: Python :: 3.11 | ||
| Classifier: Programming Language :: Python :: 3.12 | ||
| Classifier: Programming Language :: Python :: 3.13 | ||
| Classifier: Programming Language :: Python :: 3.14 | ||
| Classifier: Programming Language :: Python :: Implementation :: CPython | ||
| Classifier: Programming Language :: Python :: Implementation :: PyPy | ||
| Classifier: Programming Language :: Python :: Free Threading :: 4 - Resilient | ||
| Classifier: Typing :: Typed | ||
| License-File: LICENSE | ||
| License-File: LICENSE.APACHE | ||
| License-File: LICENSE.BSD | ||
| Project-URL: Documentation, https://packaging.pypa.io/ | ||
| Project-URL: Source, https://github.com/pypa/packaging | ||
| packaging | ||
| ========= | ||
| .. start-intro | ||
| Reusable core utilities for various Python Packaging | ||
| `interoperability specifications <https://packaging.python.org/specifications/>`_. | ||
| This library provides utilities that implement the interoperability | ||
| specifications which have clearly one correct behaviour (eg: :pep:`440`) | ||
| or benefit greatly from having a single shared implementation (eg: :pep:`425`). | ||
| .. end-intro | ||
| The ``packaging`` project includes the following: version handling, specifiers, | ||
| markers, requirements, tags, metadata, lockfiles, utilities. | ||
| Documentation | ||
| ------------- | ||
| The `documentation`_ provides information and the API for the following: | ||
| - Version Handling | ||
| - Specifiers | ||
| - Markers | ||
| - Requirements | ||
| - Tags | ||
| - Metadata | ||
| - Lockfiles | ||
| - Utilities | ||
| Installation | ||
| ------------ | ||
| Use ``pip`` to install these utilities:: | ||
| pip install packaging | ||
| The ``packaging`` library uses calendar-based versioning (``YY.N``). | ||
| Discussion | ||
| ---------- | ||
| If you run into bugs, you can file them in our `issue tracker`_. | ||
| You can also join discussions on `GitHub Discussions`_ to ask questions or get involved. | ||
| .. _`documentation`: https://packaging.pypa.io/ | ||
| .. _`issue tracker`: https://github.com/pypa/packaging/issues | ||
| .. _`GitHub Discussions`: https://github.com/pypa/packaging/discussions | ||
| Code of Conduct | ||
| --------------- | ||
| Everyone interacting in the packaging project's codebases, issue trackers, chat | ||
| rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_. | ||
| .. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md | ||
| Contributing | ||
| ------------ | ||
| The ``CONTRIBUTING.rst`` file outlines how to contribute to this project as | ||
| well as how to report a potential security issue. The documentation for this | ||
| project also covers information about `project development`_ and `security`_. | ||
| .. _`project development`: https://packaging.pypa.io/en/latest/development/ | ||
| .. _`security`: https://packaging.pypa.io/en/latest/security/ | ||
| Project History | ||
| --------------- | ||
| Please review the ``CHANGELOG.rst`` file or the `Changelog documentation`_ for | ||
| recent changes and project history. | ||
| .. _`Changelog documentation`: https://packaging.pypa.io/en/latest/changelog/ | ||
| packaging/__init__.py,sha256=VdPTbH5gdO5lDUfejETmJNtXxCpKSrFb15J4xMyje8w,494 | ||
| packaging/_elffile.py,sha256=-sKkptYqzYw2-x3QByJa5mB4rfPWu1pxkZHRx1WAFCY,3211 | ||
| packaging/_manylinux.py,sha256=Hf6nB0cOrayEs96-p3oIXAgGnFquv20DO5l-o2_Xnv0,9559 | ||
| packaging/_musllinux.py,sha256=Z6swjH3MA7XS3qXnmMN7QPhqP3fnoYI0eQ18e9-HgAE,2707 | ||
| packaging/_parser.py,sha256=U_DajsEx2VoC_F46fSVV3hDKNCWoQYkPkasO3dld0ig,10518 | ||
| packaging/_tokenizer.py,sha256=tFU2Wr-ZZJdAbkXLEJo7qUQDJaIkfft9DqaifiEND7A,5391 | ||
| packaging/dependency_groups.py,sha256=XZIAVFK9uHG4RCGprmJn3VInUWMesxha_kytJuMO9eY,10218 | ||
| packaging/direct_url.py,sha256=eKmbDiPP1sLV4Mj_kCSZqqknrIyVO9Sr7JpF8KCjp4U,10917 | ||
| packaging/errors.py,sha256=6hfEYXAf8v_IF65-lFadJOMIieBP2xIKtyEXjG1nGIs,2680 | ||
| packaging/markers.py,sha256=8D4eXn7MPfjCOHoM0RHkgWumkokORY21pXiK_XDXnL0,15258 | ||
| packaging/metadata.py,sha256=rK19fQhrBNv3nINqurpuo-QsCZQuWnmSEaR4Hp-76Js,38691 | ||
| packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 | ||
| packaging/pylock.py,sha256=G_1gncTmDbRLY1jo4VDI9Uw-b5IErh_Q9V_BbVJTmD8,33890 | ||
| packaging/requirements.py,sha256=ttyeCsLD19hoHCUChqixMKkocDGqWmXxzGZWs7IhUSA,2984 | ||
| packaging/specifiers.py,sha256=vr9t7nC5VDqapdOqbMa2tDxJcHE_elq5rBtAh3YRwKc,65328 | ||
| packaging/tags.py,sha256=nwfsCqWxlB3hZ8kxE9xayLykDnLLbYhAsNbOCENh6GM,32421 | ||
| packaging/utils.py,sha256=M7-JMKic2sP1YtV_8aW7eVGB-x3ADuKCiSrsVeCd2Uo,9848 | ||
| packaging/version.py,sha256=4XfXTSkh90jQWycNJpwJT4dBs59RSVVvJPeb30s1VnU,35427 | ||
| packaging/licenses/__init__.py,sha256=_Jx0XRiD_58palsWnyLrLuh59ZpGCPIPXLKdZo9OJvQ,7293 | ||
| packaging/licenses/_spdx.py,sha256=WW7DXiyg68up_YND_wpRYlr1SHhiV4FfJLQffghhMxQ,51122 | ||
| packaging-26.1.dist-info/licenses/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197 | ||
| packaging-26.1.dist-info/licenses/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174 | ||
| packaging-26.1.dist-info/licenses/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344 | ||
| packaging-26.1.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82 | ||
| packaging-26.1.dist-info/METADATA,sha256=7l9S61gHv-txB4r0GDduSfhr5sLI0m_N6OzcnnPjp5Q,3473 | ||
| packaging-26.1.dist-info/RECORD,, |
| Wheel-Version: 1.0 | ||
| Generator: flit 3.12.0 | ||
| Root-Is-Purelib: true | ||
| Tag: py3-none-any |
Sorry, the diff of this file is too big to display
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
381974
4.56%27
3.85%8148
4.46%