Features:
- PEP 783: add handling for Emscripten wheel tags by @hoodmane in #804
- PEP 803: add handling for the
abi3.abi3tfree-threading tag by @ngoldbaum in #1099 - PEP 723: add
packaging.dependency_groupsmodule, based on thedependency-groupspackage by @sirosen in #1065 - Add the
packaging.direct_urlmodule by @sbidoul in #944 - Add the
packaging.errorsmodule by @henryiii in #1071 - Add
SpecifierSet.is_unsatisfiableusing ranges (new internals that will be expanded in future versions) by @notatallshaw in #1119 - Add
create_compatible_tags_selectorto select compatible tags by @sbidoul in #1110 - Add a
keyargument toSpecifierSet.filter()by @frostming in #1068 - Support
&and|forMarker's by @henryiii in #1146 - Normalize
Version.__replace__and addVersion.from_partsby @henryiii in #1078 - Add an option to validate compressed tag set sort order in
parse_wheel_filenameby @r266-tech in #1150
Behavior adaptations:
- Narrow exclusion of pre-releases for
<V.postNto match spec by @notatallshaw in #1140 - Narrow exclusion of post-releases for
>Vto match spec by @notatallshaw in #1141 - Rename
format_full_versionto_format_full_versionto make it visibly private by @r266-tech in #1125 - Restrict local version to ASCII by @henryiii in #1102
Pylock (PEP 751) updates:
- Add pylock
selectfunction by @sbidoul in #1092 - Document pylock
select()method andPylockSelectErrorby @r266-tech in #1153 - Add
filenameproperty toPackageSdistandPackageWheel, more validation by @sbidoul in #1095 - Give preference to path over url by @sbidoul in #1128
- Validate name/version consistency in file names by @sbidoul in #1114
Fixes:
- Fix
>comparison for versions with dev+local segments by @veeceey in #1097 - Fix incorrect self-comparison for
InfinityTypeandNegativeInfinityTypeby @bysiber in #1093 - Canonicalize when deduplicating specifiers in
SpecifierSetby @notatallshaw in #1109 - Fix charset error message formatting by @notatallshaw in #1121
- Handle the
keyparameter inSpecifierSet.filterwhen specifiers are empty and prerelease isFalseby @notatallshaw in #1096 - Standardize inner components of
reproutput by @henryiii in #1090 Specifier's===uses original string, not normalized, when available by @notatallshaw in #1124- Propagate int-max-str-digits
ValueErrorby @notatallshaw in #1155
Performance:
- Add fast path for parsing simple versions (digits and dots only) by @notatallshaw in #1082
- Add fast path for
VersiontoVersioncomparison by skipping_keyproperty by @notatallshaw in #1083 - Cache
Versionhash value in dedicated slot by @notatallshaw in #1118 - Overhaul
_cmpkeyto remove use of custom objects by @notatallshaw in #1116 - Skip
__replace__in Specifier comparison if not needed by @notatallshaw in #1081 SpecifierSetusetupleinstead offrozensetfor_specsby @notatallshaw in #1108- Speed up complex
SpecifierSetfiltering by implementing cost-based ordering by @notatallshaw in #1105 - Speed up wildcard comparison by @notatallshaw in #1111
- Stream PEP440 filtering in
SpecifierSet.filterby @notatallshaw in #1076 - Add
__slots__toMarkerby @henryiii in #1147 - Simply
Specifierregex by @sirosen in #1106 - Skip using the hash property internally by @notatallshaw in #1115
Internal:
- Add downstream testing by @henryiii in #1049
- Benchmarking suite by @henryiii in #1059
- Benchmark variance reduction by @notatallshaw in #1107
- Add property-based tests for PEP 440 by @notatallshaw in #1144
- Clean up a few
collections.namedtuplein tests by @henryiii in #1070 - Do not reload the tags module in tests by @henryiii in #1152
- Limit
dir()/ tab-completion in REPL by @henryiii in #1011 - Add more
__all__/__dir__by @henryiii in #1069 - Cleanup pre-commit a bit by @henryiii in #1080
- Pin pre-commit file, use dependabot by @henryiii in #1133
- Remove sphinx-toolbox by @henryiii in #1135
- Use docs group, faster readthedocs by @henryiii in #1061
- Add free-threaded Python to CI by @henryiii in #1098
- Simplify combining
SpecifierSet.prereleasesby @notatallshaw in #1073 - Use direct operator methods in
_compare_compatibleby @notatallshaw in #1100 - Remove unnecessary if statement in
Specifier.prereleasesby @notatallshaw in #1074 - Remove unneeded nesting in
Specifier.prereleasesby @notatallshaw in #1072
Documentation:
- Fix documentation: grammar, typos, formatting, and outdated references by @DimitriPapadopoulos in #1084
- Fix versionadded for
Version.from_parts()by @Jackenmen in #1134 - Document
&and|operators for combiningMarkerobjects by @r266-tech in #1151 - Expand and clean up
Versiondocumentation by @henryiii in #1089 - Move license docs inline by @henryiii in #1131
- Move markers inline by @henryiii in #1104
- Move tags docs to inline by @henryiii in #1130
- Move utilities inline, like other modules by @henryiii in #1103
Benchmarks
Performance improvements since 26.0, from the new integrated benchmark suite:
uv run asv run 26.0..HEAD
New Contributors
- @veeceey made their first contribution in #1097
- @bysiber made their first contribution in #1093
- @sirosen made their first contribution in #1106
- @Jackenmen made their first contribution in #1134
- @ngoldbaum made their first contribution in #1099
- @r266-tech made their first contribution in #1151
- @hoodmane made their first contribution in #804
Full Changelog: 26.0...26.1