No unreleased changes.
- 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
)
- 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 invalid
- 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
)
- 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
)
- 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
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
)
- Add a
pp3-none-any
tag (311
) - Replace the blank pyparsing 3 exclusion with a 3.0.5 exclusion (
481
,486
) - Fix a spelling mistake (
479
)
- Update documentation entry for 21.1.
- Update pin to pyparsing to exclude 3.0.0.
- 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
)
- Run isort over the code base (
377
) - Add support for the
macosx_10_*_universal2
platform tags (379
) - Introduce
packaging.utils.parse_wheel_filename()
andparse_sdist_filename()
(387
and389
)
- Revert back to setuptools for compatibility purposes for some Linux distros (
363
) - Do not insert an underscore in wheel tags when the interpreter version number is more than 2 digits (
372
)
No unreleased changes.
Note
This release was subsequently yanked, and these changes were included in 20.7.
- Fix flit configuration, to include LICENSE files (
357
) - Make intel a recognized CPU architecture for the universal macOS platform tag (
361
) - Add some missing type hints to packaging.requirements (issue:350)
- Officially support Python 3.9 (
343
) - Deprecate the
LegacyVersion
andLegacySpecifier
classes (321
) - Handle
OSError
on non-dynamic executables when attempting to resolve the glibc version string.
- 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.
- Fix changelog for 20.2.
- 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.
- Fix a bug caused by reuse of an exhausted iterator. (
257
)
- 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
)
- Remove dependency on
attrs
(178
,179
) - Use appropriate fallbacks for CPython ABI tag (
181
,185
) - Add manylinux2014 support (
186
) - Improve ABI detection (
181
) - Properly handle debug wheels for Python 3.8 (
172
) - Improve detection of debug builds on Windows (
194
)
- Add the
packaging.tags
module. (156
) - Correctly handle two-digit versions in
python_version
(119
)
- 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.
- Improve error messages when invalid requirements are given. (
129
)
- Fix
utils.canonicalize_version
when supplying non PEP 440 versions.
- 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
).
- Fix markers that utilize
in
so that they render correctly. - Fix an erroneous test on Python RC releases.
- Add support for the deprecated
python_implementation
marker which was an undocumented setuptools marker in addition to the newer markers.
- Add support for the deprecated, PEP 345 environment markers in addition to the newer markers.
- Fix a regression in parsing requirements with whitespaces between the comma separators.
- Fix a regression in parsing requirements like
foo (==4)
.
- Fix a bug where
packaging.requirements:Requirement
was overly strict when matching legacy requirements.
- Add a function that implements the name canonicalization from PEP 503.
- Implement requirement specifiers from PEP 508.
- 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.
- Normalize post-release spellings for rev/r prefixes.
35
- 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.
- Fix a logic error that was causing inconsistent answers about whether or not a pre-release was contained within a
SpecifierSet
or not.
- 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
.
- Normalize release candidates as
rc
instead ofc
. - Expose the
VERSION_PATTERN
constant, a regular expression matching a valid version.
- Ensure that versions are normalized before comparison when used in a specifier with a less than (
<
) or greater than (>
) operator.
- 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
.
- 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.
- 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.
- Initial release.