packaging

26.0 · active · verified Fri Mar 27

Reusable core utilities for Python packaging interoperability specifications. Implements PEP 440 version handling, specifiers, markers, requirements, tags, metadata, and lockfiles. Used internally by pip, setuptools, and most build tools. Uses calendar-based versioning (YY.N). Current version is 26.0 (2026).

Warnings

Install

Imports

Quickstart

Core usage of packaging 26.x: version parsing, specifier matching, requirement parsing, and name canonicalization.

from packaging.version import Version
from packaging.specifiers import SpecifierSet
from packaging.requirements import Requirement
from packaging.utils import canonicalize_name

# Parse and compare PEP 440 versions
v = Version('1.2.3')
print(v.major, v.minor, v.micro)  # 1 2 3
print(v.is_prerelease)             # False

# Check if a version satisfies a specifier
spec = SpecifierSet('>=1.0,<2.0')
print(v in spec)                   # True

# Parse a PEP 508 requirement string
req = Requirement('requests[security]>=2.28; python_version>="3.8"')
print(req.name)      # requests
print(req.extras)    # {'security'}
print(req.specifier) # >=2.28
print(req.marker)    # python_version >= "3.8"

# Normalize a package name (PEP 503)
print(canonicalize_name('Django'))          # django
print(canonicalize_name('oslo.concurrency')) # oslo-concurrency

view raw JSON →