ResolveLib at the highest level provides a Resolver class that includes
dependency resolution logic. You give it some things, and a little
on how it should interact with them, and it will spit out a resolution
# Things I want to resolve.
requirements = [...]
# Implement logic so the resolver understands the requirement format.
provider = MyProvider()
reporter = resolvelib.BaseReporter()
# Create the (reusable) resolver.
resolver = resolvelib.Resolver(provider, reporter)
# Kick off the resolution process, and get the final result.
result = resolver.resolve(requirements)
The provider interface is specified in ``resolvelib.providers``. You don't
need to inherit anything, however, only need to implement the right
The intention of this section is to unify the terms we use when talking
this code base, and packaging in general, to avoid confusion. Class and
variable names in the code base should try to stick to terms defined here.
Things passed into ``Resolver.resolve()`` and provided by the provider are
considered opaque. They don't need to adhere to this set of terminologies.
Nothing can go wrong as long as the provider implementers can keep their
A thing that can be installed. A Package can have one or more versions
available for installation.
A string, usually in a number form, describing a snapshot of a Package.
number should increase when a Package post a new snapshot, i.e. a higher
means a more up-to-date snapshot.
A collection of one or more Versions. This could be a wildcard, indicating
any Version is acceptable.
A combination of a Package and a Version, i.e. a "concrete requirement".
people sometimes call this a "locked" or "pinned" dependency. Both of
"requirement" and "dependency", however, SHOULD NOT be used when describing
Candidate, to avoid confusion.
Some resolver architectures refer this as a "specification", but it is not
used here to avoid confusion with a *Specifier*.
An intention to acquire a needed package, i.e. an "abstract requirement". A
"dependency", if not clarified otherwise, also refers to this concept.
A Requirement should specify two things: a Package, and a Specifier.
Please see [developer documentation].
Configuration Switches (platform-specific settings discarded)
PY310 OFF Build using Python 3.10
PY39 ON Build using Python 3.9
Package Dependencies by Type
Distribution File Information
d9b7907f055c3b3a2cfc56c914ffd940122915826ff5fb5b1de0c99778f4de98 16113 resolvelib-0.8.1-py2.py3-none-any.whl
Ports that require python-resolvelib:py39