# packaging changelog > packaging release notes. - Vendor: packaging - Category: Frameworks & Libraries - Official site: https://github.com/pypa/packaging - Tracked by: What's New (https://whatsnew.fyi/product/packaging) - Harvested from: GitHub (pypa/packaging) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. ## Releases ### 26.3 - Date: 2026-08-04 - Version: 26.3 - Original notes: https://github.com/pypa/packaging/releases/tag/26.3 - Permalink: https://whatsnew.fyi/product/packaging/releases/26.3 ##### What's Changed ###### Features * Add a public `VersionRange` API and `SpecifierSet.to_range()`, representing the versions a specifier set accepts as an interval set that supports intersection, union, difference, complement, set relations, membership tests, and filtering. `VersionRange.to_specifier_set()` converts a range back to a `SpecifierSet` where a PEP 440 form exists. ([#1267](https://github.com/pypa/packaging/pull/1267), [#1270](https://github.com/pypa/packaging/pull/1270), [#1298](https://github.com/pypa/packaging/pull/1298)) * PEP 808: accept `Metadata-Version: 2.6`. ([#1194](https://github.com/pypa/packaging/pull/1194)) * Add a `limit` argument to `parse_tag()` for compressed tag sets. ([#1220](https://github.com/pypa/packaging/issues/1220)) * Add a `prefer_sdist_predicate` argument to `Pylock.select()` to prefer source distributions over wheels for selected packages. ([#1334](https://github.com/pypa/packaging/pull/1334)) * Add `pure_python_tags()` to generate the pure-Python tags for a Python version without touching the running platform. ([#1346](https://github.com/pypa/packaging/pull/1346)) * Add `SpecifierSet.is_subset()`, `SpecifierSet.is_superset()`, and `SpecifierSet.is_disjoint()`, which compare the versions two specifier sets accept. ([#1313](https://github.com/pypa/packaging/pull/1313)) ###### Behavior adaptations * Drop support for Python 3.8; packaging now requires Python 3.9 or later. ([#1157](https://github.com/pypa/packaging/pull/1157)) * Prefer native `linux_*` platform tags over `manylinux` and `musllinux` tags on Linux. ([#160](https://github.com/pypa/packaging/issues/160)) ###### Fixes for versions and specifiers * Raise `InvalidVersion` instead of `TypeError` when `Version` is given a non-string. ([#1319](https://github.com/pypa/packaging/pull/1319)) * Raise `InvalidVersion` for non-string pre-release letters passed to `Version.from_parts`. ([#1241](https://github.com/pypa/packaging/pull/1241)) * Fix an `AttributeError` when hashing internally trimmed versions. ([#1242](https://github.com/pypa/packaging/pull/1242)) * Fix `SpecifierSet.is_unsatisfiable` for post-release boundary intersections. ([#1257](https://github.com/pypa/packaging/pull/1257)) ###### Fixes for requirements and markers * Make `Requirement.__hash__` consistent with `__eq__` for trailing-zero-equivalent specifiers (e.g. `foo==1.0.0` and `foo==1.0.0.0`), so equal requirements hash equal and deduplicate in sets and dicts. ([#1232](https://github.com/pypa/packaging/pull/1232)) * Normalize requested extra names before comparing or hashing requirements. ([#644](https://github.com/pypa/packaging/issues/644)) * Preserve a `Requirement`'s specifier `prereleases` override across a pickle round trip. ([#1204](https://github.com/pypa/packaging/issues/1204)) * Raise `InvalidRequirement` instead of `InvalidSpecifier` when a requirement contains an invalid specifier. ([#1332](https://github.com/pypa/packaging/pull/1332)) * Clarify the error for post-release prefix wildcards like `==1.0.post1.*`. ([#1299](https://github.com/pypa/packaging/pull/1299)) * Preserve quoting semantics when serializing marker values, so round-tripped markers parse back to the same marker. ([#1213](https://github.com/pypa/packaging/pull/1213)) * Keep the parentheses of a nested group when serializing markers. ([#1316](https://github.com/pypa/packaging/pull/1316)) * Normalize `extra` and `dependency_groups` values in nested markers at parse time. ([#1246](https://github.com/pypa/packaging/pull/1246), [#1310](https://github.com/pypa/packaging/pull/1310)) * Raise `UndefinedComparison` when a set-valued variable like `extras` is used outside the membership form. ([#1265](https://github.com/pypa/packaging/pull/1265)) * Raise `UndefinedEnvironmentName` (a `KeyError` subclass) for missing environment keys during marker evaluation. ([#1276](http _[Truncated at 4000 characters — full notes: https://github.com/pypa/packaging/releases/tag/26.3]_ ### 26.2 - Date: 2026-04-24 - Version: 26.2 - Original notes: https://github.com/pypa/packaging/releases/tag/26.2 - Permalink: https://whatsnew.fyi/product/packaging/releases/26.2 ##### What's Changed Fixes: * Fix incorrect sysconfig var name for pyemscripten by @ryanking13 in https://github.com/pypa/packaging/pull/1160 * Make `Version`, `Specifier`, `SpecifierSet`, `Tag`, `Marker`, and `Requirement` pickle-safe and backward-compatible with pickles created in 25.0-26.1 (including references to the removed ``packaging._structures`` module) by @eachimei and @henryiii in https://github.com/pypa/packaging/pull/1163, https://github.com/pypa/packaging/pull/1168, https://github.com/pypa/packaging/pull/1170, and https://github.com/pypa/packaging/pull/1171 * fix: re-export ExceptionGroup for now by @henryiii in https://github.com/pypa/packaging/pull/1164 Documentation: * docs: add errors section and fix missing details by @henryiii in https://github.com/pypa/packaging/pull/1159 * docs(dev): document property-based test suite by @r266-tech in https://github.com/pypa/packaging/pull/1167 * Fix typo in DirectUrl documentation by @sbidoul in https://github.com/pypa/packaging/pull/1169 * docs(specifiers): add is_unsatisfiable() usage example by @r266-tech in https://github.com/pypa/packaging/pull/1166 Internal: * Enable the auditor persona on zizmor by @henryiii in https://github.com/pypa/packaging/pull/1158 * Test new pickle guarantees by @henryiii in https://github.com/pypa/packaging/pull/1174 * Use native uv integration in rtd by @henryiii in https://github.com/pypa/packaging/pull/1175 ##### New Contributors * @ryanking13 made their first contribution in https://github.com/pypa/packaging/pull/1160 * @eachimei made their first contribution in https://github.com/pypa/packaging/pull/1163 **Full Changelog**: https://github.com/pypa/packaging/compare/26.1...26.2 ### 26.1 - Date: 2026-04-14 - Version: 26.1 - Original notes: https://github.com/pypa/packaging/releases/tag/26.1 - Permalink: https://whatsnew.fyi/product/packaging/releases/26.1 Features: * ~~PEP 783: add handling for Emscripten wheel tags by @hoodmane in https://github.com/pypa/packaging/pull/804~~ (old name used in implementation, will be fixed in next release) * PEP 803: add handling for the `abi3.abi3t` free-threading tag by @ngoldbaum in https://github.com/pypa/packaging/pull/1099 * PEP 723: add `packaging.dependency_groups` module, based on the `dependency-groups` package by @sirosen in https://github.com/pypa/packaging/pull/1065 * Add the `packaging.direct_url` module by @sbidoul in https://github.com/pypa/packaging/pull/944 * Add the `packaging.errors` module by @henryiii in https://github.com/pypa/packaging/pull/1071 * Add `SpecifierSet.is_unsatisfiable` using ranges (new internals that will be expanded in future versions) by @notatallshaw in https://github.com/pypa/packaging/pull/1119 * Add `create_compatible_tags_selector` to select compatible tags by @sbidoul in https://github.com/pypa/packaging/pull/1110 * Add a `key` argument to `SpecifierSet.filter()` by @frostming in https://github.com/pypa/packaging/pull/1068 * Support `&` and `|` for `Marker`'s by @henryiii in https://github.com/pypa/packaging/pull/1146 * Normalize `Version.__replace__` and add `Version.from_parts` by @henryiii in https://github.com/pypa/packaging/pull/1078 * Add an option to validate compressed tag set sort order in `parse_wheel_filename` by @r266-tech in https://github.com/pypa/packaging/pull/1150 Behavior adaptations: * Narrow exclusion of pre-releases for `V` to match spec by @notatallshaw in https://github.com/pypa/packaging/pull/1141 * Rename `format_full_version` to `_format_full_version` to make it visibly private by @r266-tech in https://github.com/pypa/packaging/pull/1125 * Restrict local version to ASCII by @henryiii in https://github.com/pypa/packaging/pull/1102 Pylock (PEP 751) updates: * Add pylock `select` function by @sbidoul in https://github.com/pypa/packaging/pull/1092 * Document pylock `select()` method and `PylockSelectError` by @r266-tech in https://github.com/pypa/packaging/pull/1153 * Add `filename` property to `PackageSdist` and `PackageWheel`, more validation by @sbidoul in https://github.com/pypa/packaging/pull/1095 * Give preference to path over url by @sbidoul in https://github.com/pypa/packaging/pull/1128 * Validate name/version consistency in file names by @sbidoul in https://github.com/pypa/packaging/pull/1114 Fixes: * Fix `>` comparison for versions with dev+local segments by @veeceey in https://github.com/pypa/packaging/pull/1097 * Fix incorrect self-comparison for `InfinityType` and `NegativeInfinityType` by @bysiber in https://github.com/pypa/packaging/pull/1093 * Canonicalize when deduplicating specifiers in `SpecifierSet` by @notatallshaw in https://github.com/pypa/packaging/pull/1109 * Fix charset error message formatting by @notatallshaw in https://github.com/pypa/packaging/pull/1121 * Handle the `key` parameter in `SpecifierSet.filter` when specifiers are empty and prerelease is `False` by @notatallshaw in https://github.com/pypa/packaging/pull/1096 * Standardize inner components of `repr` output by @henryiii in https://github.com/pypa/packaging/pull/1090 * `Specifier`'s `===` uses original string, not normalized, when available by @notatallshaw in https://github.com/pypa/packaging/pull/1124 * Propagate int-max-str-digits `ValueError` by @notatallshaw in https://github.com/pypa/packaging/pull/1155 Performance: * Add fast path for parsing simple versions (digits and dots only) by @notatallshaw in https://github.com/pypa/packaging/pull/1082 * Add fast path for `Version` to `Version` comparison by skipping `_key` property by @notatallshaw in https://github.com/pypa/packaging/pull/1083 * Cache `Version` hash value in dedicated slot by @notatallshaw in https://github.com/pypa/packaging/pull/1118 * Ove _[Truncated at 4000 characters — full notes: https://github.com/pypa/packaging/releases/tag/26.1]_ ### 26.0 - Date: 2026-01-21 - Version: 26.0 - Original notes: https://github.com/pypa/packaging/releases/tag/26.0 - Permalink: https://whatsnew.fyi/product/packaging/releases/26.0 Read about the performance improvements here: . ##### What's Changed Features: * PEP 751: support pylock by @sbidoul in https://github.com/pypa/packaging/pull/900 * PEP 794: import name metadata by @brettcannon in https://github.com/pypa/packaging/pull/948 * Support writing metadata by @henryiii in https://github.com/pypa/packaging/pull/846 * Support `__replace__` for `Version` by @henryiii in https://github.com/pypa/packaging/pull/1003 * Support positional pattern matching for `Version` and `Specifier` by @henryiii in https://github.com/pypa/packaging/pull/1004 Behavior adaptations: * PEP 440 handling of prereleases for `Specifier.contains`, `SpecifierSet.contains`, and `SpecifierSet.filter` by @notatallshaw in https://github.com/pypa/packaging/pull/897 * Handle PEP 440 edge case in `SpecifierSet.filter` by @notatallshaw in https://github.com/pypa/packaging/pull/942 * Adjust arbitrary equality intersection preservation in `SpecifierSet` by @notatallshaw in https://github.com/pypa/packaging/pull/951 * Return `False` instead of raising for `.contains` with invalid version by @Liam-DeVoe in https://github.com/pypa/packaging/pull/932 * Support arbitrary equality on arbitrary strings for `Specifier` and `SpecifierSet`'s `filter` and `contains` method. by @notatallshaw in https://github.com/pypa/packaging/pull/954 * Only try to parse as `Version` on certain marker keys, return `False` on unequal ordered comparsions by @JP-Ellis in https://github.com/pypa/packaging/pull/939 Fixes: * Update `_hash` when unpickling `Tag()` by @dholth in https://github.com/pypa/packaging/pull/860 * Correct comment and simplify implicit prerelease handling in `Specifier.prereleases` by @notatallshaw in https://github.com/pypa/packaging/pull/896 * Use explicit `_GLibCVersion` `NamedTuple` in `_manylinux` by @cthoyt in https://github.com/pypa/packaging/pull/868 * Detect invalid license expressions containing `()` by @bwoodsend in https://github.com/pypa/packaging/pull/879 * Correct regex for metadata `'name'` format by @di in https://github.com/pypa/packaging/pull/925 * Improve the message around expecting a semicolon by @pradyunsg in https://github.com/pypa/packaging/pull/833 * Support nested parens in license expressions by @Liam-DeVoe in https://github.com/pypa/packaging/pull/931 * Add space before at symbol in `Requirements` string by @henryiii in https://github.com/pypa/packaging/pull/953 * A root logger use found by ruff LOG, use `packaging` logger instead by @henryiii in https://github.com/pypa/packaging/pull/965 * Better support for subclassing `Marker` and `Requirement` by @henryiii in https://github.com/pypa/packaging/pull/1022 * Normalize all extras, not just if it comes first by @henryiii in https://github.com/pypa/packaging/pull/1024 * Don't produce a broken repr if `Marker` fails to construct by @henryiii in https://github.com/pypa/packaging/pull/1033 Performance: * Avoid recompiling regexes in the tokenizer for a 3x speedup by @hauntsaninja in https://github.com/pypa/packaging/pull/1019 * Improve performance in `_manylinux.py` by @cthoyt in https://github.com/pypa/packaging/pull/869 * Minor cleanups to `Version` by @bearomorphism in https://github.com/pypa/packaging/pull/913 * Skip redundant creation of `Version`s in specifier comparison by @notatallshaw in https://github.com/pypa/packaging/pull/986 * Cache `Specifier`'s Version by @notatallshaw in https://github.com/pypa/packaging/pull/985 * Make `Version` a little faster by @henryiii in https://github.com/pypa/packaging/pull/987 * Minor `Version` regex cleanup by @henryiii in https://github.com/pypa/packaging/pull/990 * Faster regex on Python 3.11.5+ by @henryiii in https://github.com/pypa/packaging/pull/988 and https://github.com/pypa/packaging/pull/1055 * Lazily calculate `_key` in `Version` by @notatallshaw in https://github.com/pypa/packaging/pull/989 and regression for `packaging_legac _[Truncated at 4000 characters — full notes: https://github.com/pypa/packaging/releases/tag/26.0]_ ### 26.0rc3 - Date: 2026-01-15 - Version: 26.0rc3 - Original notes: https://github.com/pypa/packaging/releases/tag/26.0rc3 - Permalink: https://whatsnew.fyi/product/packaging/releases/26.0rc3 - Labels: Pre-release ##### What's Changed Fixes: * Support CPython 3.11.0-3.11.4 and older PyPy3.11 by @henryiii in https://github.com/pypa/packaging/pull/1055 Performance: * Faster zero stripping by @henryiii in https://github.com/pypa/packaging/pull/1058 CI: * Test on first public release of CPython 3.11 and newer by @henryiii in https://github.com/pypa/packaging/pull/1056 * Fix publication job (again) by @henryiii in https://github.com/pypa/packaging/pull/1051 * Use ``actionlint`` to check CI workflows by @miketheman in https://github.com/pypa/packaging/pull/1052 Documentation: * Fix formatting of distribution types in metadata.rst by @brettcannon in https://github.com/pypa/packaging/pull/1053 **Full Changelog**: https://github.com/pypa/packaging/compare/26.0rc2...26.0rc3 ### 26.0rc2 - Date: 2026-01-12 - Version: 26.0rc2 - Original notes: https://github.com/pypa/packaging/releases/tag/26.0rc2 - Permalink: https://whatsnew.fyi/product/packaging/releases/26.0rc2 - Labels: Pre-release ##### What's Changed Fixes: * Fix regression in (private) `Version._key` for `packaging_legacy` by @henryiii in https://github.com/pypa/packaging/pull/1048 Performance: * Tiny import time improvement and simplification by @henryiii in https://github.com/pypa/packaging/pull/1047 Internal: * Fix type hint of function used with `contextlib.contextmanager` by @SpecLad in https://github.com/pypa/packaging/pull/1046 * Always run tests by @henryiii in https://github.com/pypa/packaging/pull/1044 * Fix a changelog number by @henryiii in https://github.com/pypa/packaging/pull/1042 * Fix the publish job by @henryiii in https://github.com/pypa/packaging/pull/1043 * Get the correct tag on publish by @henryiii in https://github.com/pypa/packaging/pull/1045 **Full Changelog**: https://github.com/pypa/packaging/compare/26.0rc1...26.0rc2 ### 26.0rc1 - Date: 2026-01-09 - Version: 26.0rc1 - Original notes: https://github.com/pypa/packaging/releases/tag/26.0rc1 - Permalink: https://whatsnew.fyi/product/packaging/releases/26.0rc1 - Labels: Pre-release ##### What's Changed Features: * PEP 751: support pylock by @sbidoul in https://github.com/pypa/packaging/pull/900 * PEP 794: import name metadata by @brettcannon in https://github.com/pypa/packaging/pull/948 * Support writing metadata by @henryiii in https://github.com/pypa/packaging/pull/846 * Support `__replace__` for `Version` by @henryiii in https://github.com/pypa/packaging/pull/1003 * Support positional pattern matching for `Version` and `Specifier` by @henryiii in https://github.com/pypa/packaging/pull/1004 Behavior adaptations: * PEP 440 handling of prereleases for `Specifier.contains`, `SpecifierSet.contains`, and `SpecifierSet.filter` by @notatallshaw in https://github.com/pypa/packaging/pull/897 * Handle PEP 440 edge case in `SpecifierSet.filter` by @notatallshaw in https://github.com/pypa/packaging/pull/942 * Adjust arbitrary equality intersection preservation in `SpecifierSet` by @notatallshaw in https://github.com/pypa/packaging/pull/951 * Return `False` instead of raising for `.contains` with invalid version by @Liam-DeVoe in https://github.com/pypa/packaging/pull/932 * Support arbitrary equality on arbitrary strings for `Specifier` and `SpecifierSet`'s `filter` and `contains` method. by @notatallshaw in https://github.com/pypa/packaging/pull/954 * Only try to parse as `Version` on certain marker keys, return `False` on unequal ordered comparsions by @JP-Ellis in https://github.com/pypa/packaging/pull/939 Fixes: * Update `_hash` when unpickling `Tag()` by @dholth in https://github.com/pypa/packaging/pull/860 * Correct comment and simplify implicit prerelease handling in `Specifier.prereleases` by @notatallshaw in https://github.com/pypa/packaging/pull/896 * Use explicit `_GLibCVersion` `NamedTuple` in `_manylinux` by @cthoyt in https://github.com/pypa/packaging/pull/868 * Detect invalid license expressions containing `()` by @bwoodsend in https://github.com/pypa/packaging/pull/879 * Correct regex for metadata `'name'` format by @di in https://github.com/pypa/packaging/pull/925 * Improve the message around expecting a semicolon by @pradyunsg in https://github.com/pypa/packaging/pull/833 * Support nested parens in license expressions by @Liam-DeVoe in https://github.com/pypa/packaging/pull/931 * Add space before at symbol in `Requirements` string by @henryiii in https://github.com/pypa/packaging/pull/953 * A root logger use found by ruff LOG, use `packaging` logger instead by @henryiii in https://github.com/pypa/packaging/pull/965 * Better support for subclassing `Marker` and `Requirement` by @henryiii in https://github.com/pypa/packaging/pull/1022 * Normalize all extras, not just if it comes first by @henryiii in https://github.com/pypa/packaging/pull/1024 * Don't produce a broken repr if `Marker` fails to construct by @henryiii in https://github.com/pypa/packaging/pull/1033 Performance: * Avoid recompiling regexes in the tokenizer for a 3x speedup by @hauntsaninja in https://github.com/pypa/packaging/pull/1019 * Improve performance in `_manylinux.py` by @cthoyt in https://github.com/pypa/packaging/pull/869 * Minor cleanups to `Version` by @bearomorphism in https://github.com/pypa/packaging/pull/913 * Skip redundant creation of `Version`s in specifier comparison by @notatallshaw in https://github.com/pypa/packaging/pull/986 * Cache `Specifier`'s Version by @notatallshaw in https://github.com/pypa/packaging/pull/985 * Make `Version` a little faster by @henryiii in https://github.com/pypa/packaging/pull/987 * Minor `Version` regex cleanup by @henryiii in https://github.com/pypa/packaging/pull/990 * Faster regex on Python 3.11+ by @henryiii in https://github.com/pypa/packaging/pull/988 * Lazily calculate `_key` in `Version` by @notatallshaw in https://github.com/pypa/packaging/pull/989 * Faster `canonicalize_version` by @henryiii in https://github.com/pypa/packaging/pull/993 _[Truncated at 4000 characters — full notes: https://github.com/pypa/packaging/releases/tag/26.0rc1]_ ### 25.0 - Date: 2025-04-19 - Version: 25.0 - Original notes: https://github.com/pypa/packaging/releases/tag/25.0 - Permalink: https://whatsnew.fyi/product/packaging/releases/25.0 ##### What's Changed * Re-add a test for Unicode file name parsing by @Siddhesh-Agarwal in https://github.com/pypa/packaging/pull/863 * Upgrade to ruff 0.9.1 by @DimitriPapadopoulos in https://github.com/pypa/packaging/pull/865 * Add support for PEP 738 Android tags by @mhsmith in https://github.com/pypa/packaging/pull/880 * feat(markers): support 'extras' and 'dependency_groups' markers by @frostming in https://github.com/pypa/packaging/pull/888 ##### New Contributors * @Siddhesh-Agarwal made their first contribution in https://github.com/pypa/packaging/pull/863 * @mhsmith made their first contribution in https://github.com/pypa/packaging/pull/880 * @frostming made their first contribution in https://github.com/pypa/packaging/pull/888 **Full Changelog**: https://github.com/pypa/packaging/compare/24.2...25.0 ### 24.2 - Date: 2024-11-08 - Version: 24.2 - Original notes: https://github.com/pypa/packaging/releases/tag/24.2 - Permalink: https://whatsnew.fyi/product/packaging/releases/24.2 ##### What's Changed * The source is auto-formatted with ruff, not black by @DimitriPapadopoulos in https://github.com/pypa/packaging/pull/798 * Bump the github-actions group across 1 directory with 3 updates by @dependabot in https://github.com/pypa/packaging/pull/813 * Apply ruff rules (RUF) by @DimitriPapadopoulos in https://github.com/pypa/packaging/pull/800 * Fix typo in Version `__str__` by @aryanpingle in https://github.com/pypa/packaging/pull/817 * Bump the github-actions group with 3 updates by @dependabot in https://github.com/pypa/packaging/pull/819 * Get rid of duplicate test cases by @DimitriPapadopoulos in https://github.com/pypa/packaging/pull/821 * Fix doc for canonicalize_version and a typo in a docstring by @Laurent-Dx in https://github.com/pypa/packaging/pull/801 * docs: public/base_version comparison by @henryiii in https://github.com/pypa/packaging/pull/818 * Apply ruff/bugbear rules (B) by @DimitriPapadopoulos in https://github.com/pypa/packaging/pull/787 * Apply ruff/pyupgrade rules (UP) by @DimitriPapadopoulos in https://github.com/pypa/packaging/pull/786 * Add a changelog entry for dropping Python 3.7 support by @alexwlchan in https://github.com/pypa/packaging/pull/824 * Patch python_full_version unconditionally by @jaraco in https://github.com/pypa/packaging/pull/825 * Refactor canonicalize_version by @jaraco in https://github.com/pypa/packaging/pull/793 * Allow creating a SpecifierSet from a list of specifiers by @pfmoore in https://github.com/pypa/packaging/pull/777 * Fix uninformative error message by @abravalheri in https://github.com/pypa/packaging/pull/830 * Fix prerelease detection for `>` and `<` by @notatallshaw in https://github.com/pypa/packaging/pull/794 * Bump the github-actions group across 1 directory with 4 updates by @dependabot in https://github.com/pypa/packaging/pull/839 * Add support for PEP 730 iOS tags. by @freakboy3742 in https://github.com/pypa/packaging/pull/832 * Update the changelog to reflect 24.1 changes by @pradyunsg in https://github.com/pypa/packaging/pull/840 * Mention updating changelog in release process by @pradyunsg in https://github.com/pypa/packaging/pull/841 * Add a comment as to why `Metadata.name` isn't normalized by @brettcannon in https://github.com/pypa/packaging/pull/842 * Use !r formatter for error messages with filenames. by @Carreau in https://github.com/pypa/packaging/pull/844 * PEP 639: Implement License-Expression and License-File by @ewdurbin in https://github.com/pypa/packaging/pull/828 * Bump the github-actions group with 4 updates by @dependabot in https://github.com/pypa/packaging/pull/852 * Upgrade to latest mypy by @hauntsaninja in https://github.com/pypa/packaging/pull/853 * Extraneous quotes by @ewdurbin in https://github.com/pypa/packaging/pull/848 ##### New Contributors * @aryanpingle made their first contribution in https://github.com/pypa/packaging/pull/817 * @Laurent-Dx made their first contribution in https://github.com/pypa/packaging/pull/801 * @alexwlchan made their first contribution in https://github.com/pypa/packaging/pull/824 * @jaraco made their first contribution in https://github.com/pypa/packaging/pull/825 * @notatallshaw made their first contribution in https://github.com/pypa/packaging/pull/794 * @freakboy3742 made their first contribution in https://github.com/pypa/packaging/pull/832 * @Carreau made their first contribution in https://github.com/pypa/packaging/pull/844 * @ewdurbin made their first contribution in https://github.com/pypa/packaging/pull/828 **Full Changelog**: https://github.com/pypa/packaging/compare/24.1...24.2 ### 24.1 - Date: 2024-06-09 - Version: 24.1 - Original notes: https://github.com/pypa/packaging/releases/tag/24.1 - Permalink: https://whatsnew.fyi/product/packaging/releases/24.1 ##### What's Changed * pyupgrade/black/isort/flake8 → ruff by @DimitriPapadopoulos in https://github.com/pypa/packaging/pull/769 * Add support for Python 3.13 and drop EOL 3.7 by @hugovk in https://github.com/pypa/packaging/pull/783 * Bump the github-actions group with 4 updates by @dependabot in https://github.com/pypa/packaging/pull/782 * Fix typo in `_parser` docstring by @pradyunsg in https://github.com/pypa/packaging/pull/784 * Modernise type annotations using FA rules from ruff by @pradyunsg in https://github.com/pypa/packaging/pull/785 * Document `markers.default_environment()` by @edgarrmondragon in https://github.com/pypa/packaging/pull/753 * Bump the github-actions group with 3 updates by @dependabot in https://github.com/pypa/packaging/pull/789 * Work around platform.python_version() returning non PEP 440 compliant version for non-tagged CPython builds by @sbidoul in https://github.com/pypa/packaging/pull/802 ##### New Contributors * @dependabot made their first contribution in https://github.com/pypa/packaging/pull/782 * @edgarrmondragon made their first contribution in https://github.com/pypa/packaging/pull/753 **Full Changelog**: https://github.com/pypa/packaging/compare/24.0...24.1