Changelog¶
unreleased¶
Add the
packaging.wheelfilemodule for reading and creating wheel files (#697)Change project license metadata to use an SPDX license expression.
25.0 - 2025-04-19¶
24.2 - 2024-11-08¶
PEP 639: Implement License-Expression and License-File (#828)
Use
!rformatter for error messages with filenames (#844)Add support for PEP 730 iOS tags (#832)
Fix prerelease detection for
>and<(#794)Fix uninformative error message (#830)
Refactor
canonicalize_version(#793)Patch python_full_version unconditionally (#825)
Fix doc for
canonicalize_versionto mentionstrip_trailing_zeroand a typo in a docstring (#801)Fix typo in Version
__str__(#817)Support creating a
SpecifierSetfrom an iterable ofSpecifierobjects (#775)
24.1 - 2024-06-10¶
24.0 - 2024-03-10¶
Do specifier matching correctly when the specifier contains an epoch number and has more components than the version (#683)
Support the experimental
--disable-gilbuilds in packaging.tags (#727)BREAKING: Make optional
metadata.Metadataattributes default toNone(#733)Fix errors when trying to access the
description_content_type,keywords, andrequires_pythonattributes onmetadata.Metadatawhen those values have not been provided (#733)Fix a bug preventing the use of the built in
ExceptionGroupon versions of Python that support it (#725)
23.2 - 2023-10-01¶
Document calendar-based versioning scheme (#716)
Enforce that the entire marker string is parsed (#687)
Requirement parsing no longer automatically validates the URL (#120)
Canonicalize names for requirements comparison (#644)
Introduce
metadata.Metadata(along withmetadata.ExceptionGroupandmetadata.InvalidMetadata; #570)Introduce the
validatekeyword parameter toutils.normalize_name()(#570)Introduce
utils.is_normalized_name()(#570)Make
utils.parse_sdist_filename()andutils.parse_wheel_filename()raiseInvalidSdistFilenameandInvalidWheelFilename, respectively, when the version component of the name is invalidRemove support for Python 3.7 (#783)
23.1 - 2023-04-12¶
Parse raw metadata (#671)
Import underlying parser functions as an underscored variable (#663)
Improve error for local version label with unsupported operators (#675)
Add dedicated error for specifiers with incorrect
.*suffixReplace spaces in platform names with underscores (#620)
Relax typing of
_keyon_BaseVersion(#669)Handle prefix match with zeros at end of prefix correctly (#674)
23.0 - 2023-01-08¶
Allow
"extra"to beNonein the marker environment (#650)Refactor
tags._generic_apito useEXT_SUFFIX(#607)Correctly handle trailing whitespace on URL requirements (#642)
Fix typing for
specifiers.BaseSpecifier.filter()(#643)Use stable Python 3.11 in tests (#641)
Correctly handle non-normalised specifiers in requirements (#634)
Move to
src/layout (#626)Remove
__about__file, in favour of keeping constants in__init__(#626)
22.0 - 2022-12-07¶
Explicitly declare support for Python 3.11 (#587)
Remove support for Python 3.6 (#500)
Remove
LegacySpecifierandLegacyVersion(#407)Add
__hash__and__eq__toRequirement(#499)Add a
cpNNN-none-anytag (#541)Adhere to PEP 685 when evaluating markers with extras (#545)
Allow accepting locally installed prereleases with
SpecifierSet(#515)Allow pre-release versions in marker evaluation (#523)
Correctly parse ELF for musllinux on Big Endian (#538)
Document
packaging.utils.NormalizedName(#565)Document exceptions raised by functions in
packaging.utils(#544)Fix compatible version specifier incorrectly strip trailing
0(#493)Fix macOS platform tags with old macOS SDK (#513)
Forbid prefix version matching on pre-release/post-release segments (#563)
Normalize specifier version for prefix matching (#561)
Improve documentation for
packaging.specifiersandpackaging.version. (#572)Marker.evaluatewill now assume evaluation environment with emptyextra. Evaluating markers like"extra == 'xyz'"without passing any extra in theenvironmentwill no longer raise an exception (#550)Remove dependency on
pyparsing, by replacing it with a hand-written parser. This package now has no runtime dependencies (#468)Update return type hint for
Specifier.filterandSpecifierSet.filterto useIteratorinstead ofIterable(#584)
21.3 - 2021-11-17¶
21.2 - 2021-10-29¶
Update documentation entry for 21.1.
21.1 - 2021-10-29¶
Update pin to pyparsing to exclude 3.0.0.
21.0 - 2021-07-03¶
PEP 656: musllinux support (#411)
Drop support for Python 2.7, Python 3.4 and Python 3.5.
Replace distutils usage with sysconfig (#396)
Add support for zip files in
parse_sdist_filename(#429)Use cached
_hashattribute to short-circuit tag equality comparisons (#417)Specify the default value for the
specifierargument toSpecifierSet(#437)Proper keyword-only “warn” argument in packaging.tags (#403)
Correctly remove prerelease suffixes from ~= check (#366)
Fix type hints for
Version.postandVersion.dev(#393)Use typing alias
UnparsedVersion(#398)Improve type inference for
packaging.specifiers.filter()(#430)Tighten the return type of
canonicalize_version()(#402)
20.9 - 2021-01-29¶
20.8 - 2020-12-11¶
20.7 - 2020-11-28¶
No unreleased changes.
20.6 - 2020-11-28¶
Note
This release was subsequently yanked, and these changes were included in 20.7.
20.5 - 2020-11-27¶
20.4 - 2020-05-19¶
Canonicalize version before comparing specifiers. (#282)
Change type hint for
canonicalize_nameto returnpackaging.utils.NormalizedName. This enables the use of static typing tools (like mypy) to detect mixing of normalized and un-normalized names.
20.3 - 2020-03-05¶
Fix changelog for 20.2.
20.2 - 2020-03-05¶
Fix a bug that caused a 32-bit OS that runs on a 64-bit ARM CPU (e.g. ARM-v8, aarch64), to report the wrong bitness.
20.1 - 2020-01-24¶
Fix a bug caused by reuse of an exhausted iterator. (#257)
20.0 - 2020-01-06¶
Add type hints (#191)
Add proper trove classifiers for PyPy support (#198)
Scale back depending on
ctypesfor manylinux support detection (#171)Use
sys.implementation.namewhere appropriate forpackaging.tags(#193)Expand upon the API provided by
packaging.tags:interpreter_name(),mac_platforms(),compatible_tags(),cpython_tags(),generic_tags()(#187)Officially support Python 3.8 (#232)
Add
major,minor, andmicroaliases topackaging.version.Version(#225)Properly mark
packaginghas being fully typed by adding apy.typedfile (#226)
19.2 - 2019-09-18¶
19.1 - 2019-07-30¶
19.0 - 2019-01-20¶
Fix string representation of PEP 508 direct URL requirements with markers.
Better handling of file URLs
This allows for using
file:///absolute/path, which was previously prevented due to the missingnetloc.This allows for all file URLs that
urlunparseturns back into the original URL to be valid.
18.0 - 2018-09-26¶
Improve error messages when invalid requirements are given. (#129)
17.1 - 2017-02-28¶
Fix
utils.canonicalize_versionwhen supplying non PEP 440 versions.
17.0 - 2017-02-28¶
Drop support for python 2.6, 3.2, and 3.3.
Define minimal pyparsing version to 2.0.2 (#91).
Add
epoch,release,pre,dev, andpostattributes toVersionandLegacyVersion(#34).Add
Version().is_devreleaseandLegacyVersion().is_devreleaseto make it easy to determine if a release is a development release.Add
utils.canonicalize_versionto canonicalize version strings orVersioninstances (#121).
16.8 - 2016-10-29¶
Fix markers that utilize
inso that they render correctly.Fix an erroneous test on Python RC releases.
16.7 - 2016-04-23¶
Add support for the deprecated
python_implementationmarker which was an undocumented setuptools marker in addition to the newer markers.
16.6 - 2016-03-29¶
Add support for the deprecated, PEP 345 environment markers in addition to the newer markers.
16.5 - 2016-02-26¶
Fix a regression in parsing requirements with whitespaces between the comma separators.
16.4 - 2016-02-22¶
Fix a regression in parsing requirements like
foo (==4).
16.3 - 2016-02-21¶
Fix a bug where
packaging.requirements:Requirementwas overly strict when matching legacy requirements.
16.2 - 2016-02-09¶
Add a function that implements the name canonicalization from PEP 503.
16.1 - 2016-02-07¶
Implement requirement specifiers from PEP 508.
16.0 - 2016-01-19¶
Relicense so that packaging is available under either the Apache License, Version 2.0 or a 2 Clause BSD license.
Support installation of packaging when only distutils is available.
Fix
==comparison when there is a prefix and a local version in play. (#41).Implement environment markers from PEP 508.
15.3 - 2015-08-01¶
Normalize post-release spellings for rev/r prefixes. #35
15.2 - 2015-05-13¶
Fix an error where the arbitrary specifier (
===) was not correctly allowing pre-releases when it was being used.Expose the specifier and version parts through properties on the
Specifierclasses.Allow iterating over the
SpecifierSetto get access to all of theSpecifierinstances.Allow testing if a version is contained within a specifier via the
inoperator.
15.1 - 2015-04-13¶
Fix a logic error that was causing inconsistent answers about whether or not a pre-release was contained within a
SpecifierSetor not.
15.0 - 2015-01-02¶
Add
Version().is_postreleaseandLegacyVersion().is_postreleaseto make it easy to determine if a release is a post release.Add
Version().base_versionandLegacyVersion().base_versionto make it easy to get the public version without any pre or post release markers.Support the update to PEP 440 which removed the implied
!=V.*when using either>Vor<Vand which instead special cased the handling of pre-releases, post-releases, and local versions when using>Vor<V.
14.5 - 2014-12-17¶
Normalize release candidates as
rcinstead ofc.Expose the
VERSION_PATTERNconstant, a regular expression matching a valid version.
14.4 - 2014-12-15¶
Ensure that versions are normalized before comparison when used in a specifier with a less than (
<) or greater than (>) operator.
14.3 - 2014-11-19¶
BACKWARDS INCOMPATIBLE Refactor specifier support so that it can sanely handle legacy specifiers as well as PEP 440 specifiers.
BACKWARDS INCOMPATIBLE Move the specifier support out of
packaging.versionintopackaging.specifiers.
14.2 - 2014-09-10¶
Add prerelease support to
Specifier.Remove the ability to do
item in Specifier()and replace it withSpecifier().contains(item)in order to allow flags that signal if a prerelease should be accepted or not.Add a method
Specifier().filter()which will take an iterable and returns an iterable with items that do not match the specifier filtered out.
14.1 - 2014-09-08¶
Allow
LegacyVersionandVersionto be sorted together.Add
packaging.version.parse()to enable easily parsing a version string as either aVersionor aLegacyVersiondepending on it’s PEP 440 validity.
14.0 - 2014-09-05¶
Initial release.