Update dependency packaging to v26.3 #183

Merged
renovate-bot merged 1 commit from renovate/packaging-26.x into master 2026-08-19 06:02:54 +02:00
Collaborator

This PR contains the following updates:

Package Change Age Confidence
packaging ==26.2 → ==26.3 age confidence

Release Notes

pypa/packaging (packaging)

v26.3

Compare Source

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, #​1270, #​1298)
  • PEP 808: accept Metadata-Version: 2.6. (#​1194)
  • Add a limit argument to parse_tag() for compressed tag sets. (#​1220)
  • Add a prefer_sdist_predicate argument to Pylock.select() to prefer source distributions over wheels for selected packages. (#​1334)
  • Add pure_python_tags() to generate the pure-Python tags for a Python version without touching the running platform. (#​1346)
  • Add SpecifierSet.is_subset(), SpecifierSet.is_superset(), and SpecifierSet.is_disjoint(), which compare the versions two specifier sets accept. (#​1313)
Behavior adaptations
  • Drop support for Python 3.8; packaging now requires Python 3.9 or later. (#​1157)
  • Prefer native linux_* platform tags over manylinux and musllinux tags on Linux. (#​160)
Fixes for versions and specifiers
  • Raise InvalidVersion instead of TypeError when Version is given a non-string. (#​1319)
  • Raise InvalidVersion for non-string pre-release letters passed to Version.from_parts. (#​1241)
  • Fix an AttributeError when hashing internally trimmed versions. (#​1242)
  • Fix SpecifierSet.is_unsatisfiable for post-release boundary intersections. (#​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)
  • Normalize requested extra names before comparing or hashing requirements. (#​644)
  • Preserve a Requirement's specifier prereleases override across a pickle round trip. (#​1204)
  • Raise InvalidRequirement instead of InvalidSpecifier when a requirement contains an invalid specifier. (#​1332)
  • Clarify the error for post-release prefix wildcards like ==1.0.post1.*. (#​1299)
  • Preserve quoting semantics when serializing marker values, so round-tripped markers parse back to the same marker. (#​1213)
  • Keep the parentheses of a nested group when serializing markers. (#​1316)
  • Normalize extra and dependency_groups values in nested markers at parse time. (#​1246, #​1310)
  • Raise UndefinedComparison when a set-valued variable like extras is used outside the membership form. (#​1265)
  • Raise UndefinedEnvironmentName (a KeyError subclass) for missing environment keys during marker evaluation. (#​1276)
  • Wrap malformed string literal errors in InvalidMarker / InvalidRequirement instead of leaking a low-level error. (#​1249)
  • Reject requirements and markers with a trailing line break. (#​1345)
Fixes for metadata and licenses
  • Collect all from_email validation errors into one ExceptionGroup instead of raising the first. (#​1268)
  • Accept the UTF-8 charset case-insensitively in email payloads. (#​1330)
  • Reject malformed Description-Content-Type values. (#​1329)
  • Don't rewrite user values that contain {field} placeholders in error messages. (#​1327)
  • Route multipart email payloads to unparsed instead of asserting. (#​1247)
  • Make InvalidMetadata and CyclicDependencyGroup picklable. (#​1328)
  • Fold every line boundary str.splitlines recognizes when writing a header with RFC822Message. (#​1356)
  • Raise InvalidLicenseExpression for misplaced WITH clauses and empty LicenseRef- names. (#​1266)
  • Raise InvalidLicenseExpression instead of KeyError for a LicenseRef- with a + suffix. (#​1219)
Fixes for tags and filenames
  • Raise InvalidTag from parse_tag() for tags with the wrong number of components. (#​1238)
  • Reject empty tag components in parse_wheel_filename() and parse_tag(). (#​1234)
  • Reject an empty project name in the wheel and sdist filename parsers. (#​1305)
  • Reject wheel filenames with a trailing newline. (#​1341)
  • Reject wheel tags whose interpreter component is not an identifier. (#​577)
  • is_normalized_name now rejects names with collapsed double hyphens like a--b. (#​1230)
  • Fix duplicate explicit abi3t tags. (#​1245)
  • Forward the warn argument to generic_tags() in sys_tags(). (#​1264)
  • Raise SystemError for an empty or malformed CPython EXT_SUFFIX. (#​1271, #​1301)
  • Fix a typo in the macOS fat3 architecture name (was fat32). (#​1199)
Fixes for pylock, direct URLs, and dependency groups
  • Percent-decode pylock artifact file names derived from a url so that local versions (e.g. a wheel with 2.12.1+cu130 encoded as 2.12.1%2Bcu130) yield a valid file name. (#​1314)
  • Use an explicitly empty tags sequence in Pylock.select() instead of falling back to sys_tags(). (#​1349)
  • Fix Pylock.select() on Python builds that report a non-PEP 440 python_full_version (e.g. 3.15.0+). (#​1179)
  • Reject TOML booleans where integers are expected in pylock files. (#​1244)
  • Add PylockSelectError to packaging.pylock.__all__. (#​1202)
  • Fix DirectUrl credential stripping for passwords containing @. (#​1218)
  • Parse the URL scheme case-insensitively when checking for file URLs in direct_url. (#​1240)
  • Require absolute file URLs for local directories in direct_url. (#​1297)
  • Collect InvalidRequirement errors while resolving dependency groups instead of leaking them. (#​1302)
  • Don't cache malformed dependency group parses. (#​1248)
Performance
  • Implement Specifier and SpecifierSet filtering with the new range engine. (#​1120, #​1259)
  • Cache the default marker environment. (#​1250)
  • Cache the _manylinux module lookup process-wide. (#​1254)
  • Add __slots__ to Requirement and the token classes. (#​1320, #​1258)
  • Keep range caches across canonicalization, precompile the wheel project-name pattern, simplify parse_tag(), and skip platform.mac_ver() when the version and arch are given. (#​1253, #​1256, #​1236, #​1255)
Documentation
Internal
  • Add Python 3.15 to the test matrix. (#​1190)
  • Add a musl/Alpine test job and make the test suite pass on musl. (#​1226, #​1227)
  • Expand the downstream test matrix by ten projects. (#​1261)
  • Update to mypy 2. (#​1191)
  • Use nox's uv integration. (#​1057)

New Contributors

Full Changelog: https://github.com/pypa/packaging/compare/26.2...26.3


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [packaging](https://github.com/pypa/packaging) | `==26.2` → `==26.3` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/26.2/26.3?slim=true) | --- ### Release Notes <details> <summary>pypa/packaging (packaging)</summary> ### [`v26.3`](https://github.com/pypa/packaging/releases/tag/26.3) [Compare Source](https://github.com/pypa/packaging/compare/26.2...26.3) <!-- Release notes generated using configuration in .github/release.yml at 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. ([#&#8203;1267](https://github.com/pypa/packaging/pull/1267), [#&#8203;1270](https://github.com/pypa/packaging/pull/1270), [#&#8203;1298](https://github.com/pypa/packaging/pull/1298)) - PEP 808: accept `Metadata-Version: 2.6`. ([#&#8203;1194](https://github.com/pypa/packaging/pull/1194)) - Add a `limit` argument to `parse_tag()` for compressed tag sets. ([#&#8203;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. ([#&#8203;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. ([#&#8203;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. ([#&#8203;1313](https://github.com/pypa/packaging/pull/1313)) ##### Behavior adaptations - Drop support for Python 3.8; packaging now requires Python 3.9 or later. ([#&#8203;1157](https://github.com/pypa/packaging/pull/1157)) - Prefer native `linux_*` platform tags over `manylinux` and `musllinux` tags on Linux. ([#&#8203;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. ([#&#8203;1319](https://github.com/pypa/packaging/pull/1319)) - Raise `InvalidVersion` for non-string pre-release letters passed to `Version.from_parts`. ([#&#8203;1241](https://github.com/pypa/packaging/pull/1241)) - Fix an `AttributeError` when hashing internally trimmed versions. ([#&#8203;1242](https://github.com/pypa/packaging/pull/1242)) - Fix `SpecifierSet.is_unsatisfiable` for post-release boundary intersections. ([#&#8203;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. ([#&#8203;1232](https://github.com/pypa/packaging/pull/1232)) - Normalize requested extra names before comparing or hashing requirements. ([#&#8203;644](https://github.com/pypa/packaging/issues/644)) - Preserve a `Requirement`'s specifier `prereleases` override across a pickle round trip. ([#&#8203;1204](https://github.com/pypa/packaging/issues/1204)) - Raise `InvalidRequirement` instead of `InvalidSpecifier` when a requirement contains an invalid specifier. ([#&#8203;1332](https://github.com/pypa/packaging/pull/1332)) - Clarify the error for post-release prefix wildcards like `==1.0.post1.*`. ([#&#8203;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. ([#&#8203;1213](https://github.com/pypa/packaging/pull/1213)) - Keep the parentheses of a nested group when serializing markers. ([#&#8203;1316](https://github.com/pypa/packaging/pull/1316)) - Normalize `extra` and `dependency_groups` values in nested markers at parse time. ([#&#8203;1246](https://github.com/pypa/packaging/pull/1246), [#&#8203;1310](https://github.com/pypa/packaging/pull/1310)) - Raise `UndefinedComparison` when a set-valued variable like `extras` is used outside the membership form. ([#&#8203;1265](https://github.com/pypa/packaging/pull/1265)) - Raise `UndefinedEnvironmentName` (a `KeyError` subclass) for missing environment keys during marker evaluation. ([#&#8203;1276](https://github.com/pypa/packaging/pull/1276)) - Wrap malformed string literal errors in `InvalidMarker` / `InvalidRequirement` instead of leaking a low-level error. ([#&#8203;1249](https://github.com/pypa/packaging/pull/1249)) - Reject requirements and markers with a trailing line break. ([#&#8203;1345](https://github.com/pypa/packaging/pull/1345)) ##### Fixes for metadata and licenses - Collect all `from_email` validation errors into one `ExceptionGroup` instead of raising the first. ([#&#8203;1268](https://github.com/pypa/packaging/pull/1268)) - Accept the UTF-8 charset case-insensitively in email payloads. ([#&#8203;1330](https://github.com/pypa/packaging/pull/1330)) - Reject malformed `Description-Content-Type` values. ([#&#8203;1329](https://github.com/pypa/packaging/pull/1329)) - Don't rewrite user values that contain `{field}` placeholders in error messages. ([#&#8203;1327](https://github.com/pypa/packaging/pull/1327)) - Route multipart email payloads to `unparsed` instead of asserting. ([#&#8203;1247](https://github.com/pypa/packaging/pull/1247)) - Make `InvalidMetadata` and `CyclicDependencyGroup` picklable. ([#&#8203;1328](https://github.com/pypa/packaging/pull/1328)) - Fold every line boundary `str.splitlines` recognizes when writing a header with `RFC822Message`. ([#&#8203;1356](https://github.com/pypa/packaging/pull/1356)) - Raise `InvalidLicenseExpression` for misplaced `WITH` clauses and empty `LicenseRef-` names. ([#&#8203;1266](https://github.com/pypa/packaging/pull/1266)) - Raise `InvalidLicenseExpression` instead of `KeyError` for a `LicenseRef-` with a `+` suffix. ([#&#8203;1219](https://github.com/pypa/packaging/pull/1219)) ##### Fixes for tags and filenames - Raise `InvalidTag` from `parse_tag()` for tags with the wrong number of components. ([#&#8203;1238](https://github.com/pypa/packaging/pull/1238)) - Reject empty tag components in `parse_wheel_filename()` and `parse_tag()`. ([#&#8203;1234](https://github.com/pypa/packaging/pull/1234)) - Reject an empty project name in the wheel and sdist filename parsers. ([#&#8203;1305](https://github.com/pypa/packaging/pull/1305)) - Reject wheel filenames with a trailing newline. ([#&#8203;1341](https://github.com/pypa/packaging/pull/1341)) - Reject wheel tags whose interpreter component is not an identifier. ([#&#8203;577](https://github.com/pypa/packaging/issues/577)) - `is_normalized_name` now rejects names with collapsed double hyphens like `a--b`. ([#&#8203;1230](https://github.com/pypa/packaging/pull/1230)) - Fix duplicate explicit `abi3t` tags. ([#&#8203;1245](https://github.com/pypa/packaging/pull/1245)) - Forward the `warn` argument to `generic_tags()` in `sys_tags()`. ([#&#8203;1264](https://github.com/pypa/packaging/pull/1264)) - Raise `SystemError` for an empty or malformed CPython `EXT_SUFFIX`. ([#&#8203;1271](https://github.com/pypa/packaging/pull/1271), [#&#8203;1301](https://github.com/pypa/packaging/pull/1301)) - Fix a typo in the macOS `fat3` architecture name (was `fat32`). ([#&#8203;1199](https://github.com/pypa/packaging/pull/1199)) ##### Fixes for pylock, direct URLs, and dependency groups - Percent-decode `pylock` artifact file names derived from a `url` so that local versions (e.g. a wheel with `2.12.1+cu130` encoded as `2.12.1%2Bcu130`) yield a valid file name. ([#&#8203;1314](https://github.com/pypa/packaging/pull/1314)) - Use an explicitly empty `tags` sequence in `Pylock.select()` instead of falling back to `sys_tags()`. ([#&#8203;1349](https://github.com/pypa/packaging/pull/1349)) - Fix `Pylock.select()` on Python builds that report a non-PEP 440 `python_full_version` (e.g. `3.15.0+`). ([#&#8203;1179](https://github.com/pypa/packaging/pull/1179)) - Reject TOML booleans where integers are expected in `pylock` files. ([#&#8203;1244](https://github.com/pypa/packaging/pull/1244)) - Add `PylockSelectError` to `packaging.pylock.__all__`. ([#&#8203;1202](https://github.com/pypa/packaging/pull/1202)) - Fix `DirectUrl` credential stripping for passwords containing `@`. ([#&#8203;1218](https://github.com/pypa/packaging/pull/1218)) - Parse the URL scheme case-insensitively when checking for file URLs in `direct_url`. ([#&#8203;1240](https://github.com/pypa/packaging/pull/1240)) - Require absolute file URLs for local directories in `direct_url`. ([#&#8203;1297](https://github.com/pypa/packaging/pull/1297)) - Collect `InvalidRequirement` errors while resolving dependency groups instead of leaking them. ([#&#8203;1302](https://github.com/pypa/packaging/pull/1302)) - Don't cache malformed dependency group parses. ([#&#8203;1248](https://github.com/pypa/packaging/pull/1248)) ##### Performance - Implement `Specifier` and `SpecifierSet` filtering with the new range engine. ([#&#8203;1120](https://github.com/pypa/packaging/pull/1120), [#&#8203;1259](https://github.com/pypa/packaging/pull/1259)) - Cache the default marker environment. ([#&#8203;1250](https://github.com/pypa/packaging/pull/1250)) - Cache the `_manylinux` module lookup process-wide. ([#&#8203;1254](https://github.com/pypa/packaging/pull/1254)) - Add `__slots__` to `Requirement` and the token classes. ([#&#8203;1320](https://github.com/pypa/packaging/pull/1320), [#&#8203;1258](https://github.com/pypa/packaging/pull/1258)) - Keep range caches across canonicalization, precompile the wheel project-name pattern, simplify `parse_tag()`, and skip `platform.mac_ver()` when the version and arch are given. ([#&#8203;1253](https://github.com/pypa/packaging/pull/1253), [#&#8203;1256](https://github.com/pypa/packaging/pull/1256), [#&#8203;1236](https://github.com/pypa/packaging/pull/1236), [#&#8203;1255](https://github.com/pypa/packaging/pull/1255)) ##### Documentation - Describe the validation scope of `packaging.pylock`. ([#&#8203;1339](https://github.com/pypa/packaging/pull/1339)) - Explain which `packaging.metadata` fields are validated. ([#&#8203;1342](https://github.com/pypa/packaging/pull/1342)) - Document `RFC822Policy` in the low-level `packaging.metadata` interface. ([#&#8203;1222](https://github.com/pypa/packaging/pull/1222)) - Enable nitpicky mode and render missing classes and fields in the API reference. ([#&#8203;1196](https://github.com/pypa/packaging/pull/1196), [#&#8203;1225](https://github.com/pypa/packaging/pull/1225), [#&#8203;1277](https://github.com/pypa/packaging/pull/1277)) - Add missing `versionadded` / `versionchanged` directives and many small docstring fixes across the API reference. ([#&#8203;1205](https://github.com/pypa/packaging/pull/1205), [#&#8203;1207](https://github.com/pypa/packaging/pull/1207), [#&#8203;1208](https://github.com/pypa/packaging/pull/1208), [#&#8203;1209](https://github.com/pypa/packaging/pull/1209), [#&#8203;1211](https://github.com/pypa/packaging/pull/1211), [#&#8203;1216](https://github.com/pypa/packaging/pull/1216), [#&#8203;1217](https://github.com/pypa/packaging/pull/1217), [#&#8203;1223](https://github.com/pypa/packaging/pull/1223), [#&#8203;1272](https://github.com/pypa/packaging/pull/1272), [#&#8203;1273](https://github.com/pypa/packaging/pull/1273), [#&#8203;1274](https://github.com/pypa/packaging/pull/1274), [#&#8203;1291](https://github.com/pypa/packaging/pull/1291), [#&#8203;1300](https://github.com/pypa/packaging/pull/1300), [#&#8203;1303](https://github.com/pypa/packaging/pull/1303), [#&#8203;1317](https://github.com/pypa/packaging/pull/1317), [#&#8203;1344](https://github.com/pypa/packaging/pull/1344)) ##### Internal - Add Python 3.15 to the test matrix. ([#&#8203;1190](https://github.com/pypa/packaging/pull/1190)) - Add a musl/Alpine test job and make the test suite pass on musl. ([#&#8203;1226](https://github.com/pypa/packaging/pull/1226), [#&#8203;1227](https://github.com/pypa/packaging/pull/1227)) - Expand the downstream test matrix by ten projects. ([#&#8203;1261](https://github.com/pypa/packaging/pull/1261)) - Update to mypy 2. ([#&#8203;1191](https://github.com/pypa/packaging/pull/1191)) - Use nox's uv integration. ([#&#8203;1057](https://github.com/pypa/packaging/pull/1057)) #### New Contributors - [@&#8203;Sean-Kenneth-Doherty](https://github.com/Sean-Kenneth-Doherty) made their first contribution in [#&#8203;1187](https://github.com/pypa/packaging/pull/1187) - [@&#8203;jsirois](https://github.com/jsirois) made their first contribution in [#&#8203;1199](https://github.com/pypa/packaging/pull/1199) - [@&#8203;Alan-K-Biju-7](https://github.com/Alan-K-Biju-7) made their first contribution in [#&#8203;1217](https://github.com/pypa/packaging/pull/1217) - [@&#8203;facutuesca](https://github.com/facutuesca) made their first contribution in [#&#8203;1218](https://github.com/pypa/packaging/pull/1218) - [@&#8203;NovaLux12](https://github.com/NovaLux12) made their first contribution in [#&#8203;1317](https://github.com/pypa/packaging/pull/1317) - [@&#8203;atsuoishimoto](https://github.com/atsuoishimoto) made their first contribution in [#&#8203;1314](https://github.com/pypa/packaging/pull/1314) - [@&#8203;gaoflow](https://github.com/gaoflow) made their first contribution in [#&#8203;1291](https://github.com/pypa/packaging/pull/1291) - [@&#8203;jacobdr](https://github.com/jacobdr) made their first contribution in [#&#8203;608](https://github.com/pypa/packaging/pull/608) - [@&#8203;deepakganesh78](https://github.com/deepakganesh78) made their first contribution in [#&#8203;1351](https://github.com/pypa/packaging/pull/1351) - [@&#8203;rajath201](https://github.com/rajath201) made their first contribution in [#&#8203;1356](https://github.com/pypa/packaging/pull/1356) **Full Changelog**: <https://github.com/pypa/packaging/compare/26.2...26.3> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4zMy4yIiwidXBkYXRlZEluVmVyIjoiNDQuMzMuMiIsInRhcmdldEJyYW5jaCI6Im1hc3RlciIsImxhYmVscyI6W119-->
Update dependency packaging to v26.3
All checks were successful
Python formatting PEP8 / Python-PEP8 (push) Successful in 12s
Renovate / forgejo (push) Successful in 18s
Test / test (push) Successful in 15s
Test / test (pull_request) Successful in 15s
e005739904
renovate-bot scheduled this pull request to auto merge when all checks succeed 2026-08-19 06:01:11 +02:00
renovate-bot deleted branch renovate/packaging-26.x 2026-08-19 06:02:54 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
finn/reminder!183
No description provided.