Dependency Groups¶
Package data as defined in pyproject.toml may include lists of dependencies
in named groups. This is described by the
dependency groups specification, which defines
the [dependency-groups] table.
This module provides tools for resolving group names to lists of requirements,
most notably expanding include-group directives.
Usage¶
Two primary interfaces are offered. An object-based one which caches results and
provides Requirements as its results:
>>> from packaging.dependency_groups import DependencyGroupResolver
>>> coverage = ["coverage"]
>>> test = ["pytest", {"include-group": "coverage"}]
>>> # A resolver is defined on a mapping of group names to group data, as
>>> # you might get by loading the [dependency-groups] TOML table.
>>> resolver = DependencyGroupResolver({"test": test, "coverage": coverage})
>>> # resolvers support expanding group names to Requirements
>>> resolver.resolve("coverage")
(<Requirement('coverage')>,)
>>> resolver.resolve("test")
(<Requirement('pytest')>, <Requirement('coverage')>)
>>> # resolvers can also be used to lookup the dependency groups without
>>> # expanding includes
>>> resolver.lookup("test")
(<Requirement('pytest')>, DependencyGroupInclude('coverage'))
And a simpler functional interface which responds with strings:
>>> from packaging.dependency_groups import resolve_dependency_groups
>>> coverage = ["coverage"]
>>> test = ["pytest", {"include-group": "coverage"}]
>>> groups = {"test": test, "coverage": coverage}
>>> resolve_dependency_groups(groups, "test")
('pytest', 'coverage')
Reference¶
Functional Interface¶
- packaging.dependency_groups.resolve_dependency_groups(dependency_groups, /, *groups)¶
Resolve a dependency group to a tuple of requirements, as strings.
Object Model Interface¶
- class packaging.dependency_groups.DependencyGroupInclude¶
- class packaging.dependency_groups.DependencyGroupResolver¶
A resolver for Dependency Group data.
This class handles caching, name normalization, cycle detection, and other parsing requirements. There are only two public methods for exploring the data:
lookup()andresolve().- Parameters:
dependency_groups – A mapping, as provided via pyproject
[dependency-groups].
- __init__(dependency_groups)¶
- lookup(group)¶
Lookup a group name, returning the parsed dependency data for that group. This will not resolve includes.
- Parameters:
group (str) – the name of the group to lookup
- Return type:
- resolve(group)¶
Resolve a dependency group to a list of requirements.
- Parameters:
group (str) – the name of the group to resolve
- Return type:
tuple[Requirement, …]
Exceptions¶
- class packaging.dependency_groups.DuplicateGroupNames¶
The same dependency groups were defined twice, with different non-normalized names.
- class packaging.dependency_groups.CyclicDependencyGroup¶
The dependency group includes form a cycle.
- class packaging.dependency_groups.InvalidDependencyGroupObject¶
A member of a dependency group was identified as a dict, but was not in a valid format.