Changelog¶
unreleased¶
Support creating a
SpecifierSet
from an iterable ofSpecifier
objects (#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-gil
builds in packaging.tags (#727)BREAKING: Make optional
metadata.Metadata
attributes default toNone
(#733)Fix errors when trying to access the
description_content_type
,keywords
, andrequires_python
attributes onmetadata.Metadata
when those values have not been provided (#733)Fix a bug preventing the use of the built in
ExceptionGroup
on 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.ExceptionGroup
andmetadata.InvalidMetadata
; #570)Introduce the
validate
keyword parameter toutils.normalize_name()
(#570)Introduce
utils.is_normalized_name()
(#570)Make
utils.parse_sdist_filename()
andutils.parse_wheel_filename()
raiseInvalidSdistFilename
andInvalidWheelFilename
, 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 .* suffix
Replace spaces in platform names with underscores (#620)
Relax typing of
_key
on_BaseVersion
(#669)Handle prefix match with zeros at end of prefix correctly (#674)
23.0 - 2023-01-08¶
Allow
"extra"
to beNone
in the marker environment (#650)Refactor
tags._generic_api
to 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
LegacySpecifier
andLegacyVersion
(#407)Add
__hash__
and__eq__
toRequirement
(#499)Add a
cpNNN-none-any
tag (#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.specifiers
andpackaging.version
. (#572)Marker.evaluate
will now assume evaluation environment with emptyextra
. Evaluating markers like"extra == 'xyz'"
without passing any extra in theenvironment
will 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.filter
andSpecifierSet.filter
to useIterator
instead 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
_hash
attribute to short-circuit tag equality comparisons (#417)Specify the default value for the
specifier
argument toSpecifierSet
(#437)Proper keyword-only “warn” argument in packaging.tags (#403)
Correctly remove prerelease suffixes from ~= check (#366)
Fix type hints for
Version.post
andVersion.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_name
to 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
ctypes
for manylinux support detection (#171)Use
sys.implementation.name
where 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
, andmicro
aliases topackaging.version.Version
(#225)Properly mark
packaging
has being fully typed by adding a py.typed file (#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
urlunparse
turns 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_version
when 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
, andpost
attributes toVersion
andLegacyVersion
(#34).Add
Version().is_devrelease
andLegacyVersion().is_devrelease
to make it easy to determine if a release is a development release.Add
utils.canonicalize_version
to canonicalize version strings orVersion
instances (#121).
16.8 - 2016-10-29¶
Fix markers that utilize
in
so that they render correctly.Fix an erroneous test on Python RC releases.
16.7 - 2016-04-23¶
Add support for the deprecated
python_implementation
marker 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:Requirement
was 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
Specifier
classes.Allow iterating over the
SpecifierSet
to get access to all of theSpecifier
instances.Allow testing if a version is contained within a specifier via the
in
operator.
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
SpecifierSet
or not.
15.0 - 2015-01-02¶
Add
Version().is_postrelease
andLegacyVersion().is_postrelease
to make it easy to determine if a release is a post release.Add
Version().base_version
andLegacyVersion().base_version
to 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>V
or<V
and which instead special cased the handling of pre-releases, post-releases, and local versions when using>V
or<V
.
14.5 - 2014-12-17¶
Normalize release candidates as
rc
instead ofc
.Expose the
VERSION_PATTERN
constant, 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.version
intopackaging.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
LegacyVersion
andVersion
to be sorted together.Add
packaging.version.parse()
to enable easily parsing a version string as either aVersion
or aLegacyVersion
depending on it’s PEP 440 validity.
14.0 - 2014-09-05¶
Initial release.