All Projects → sarugaku → resolvelib

sarugaku / resolvelib

Licence: ISC license
Resolve abstract dependencies into concrete ones

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to resolvelib

passa
Resolver implementation and toolset for generating and interacting with Pipfile and Pipfile.lock.
Stars: ✭ 54 (-41.3%)
Mutual labels:  pip, requirements, pipenv
serverless-python-requirements
⚡️🐍📦 Serverless plugin to bundle Python packages
Stars: ✭ 971 (+955.43%)
Mutual labels:  pip, requirements, pipenv
requirementslib
A tool for converting between pip-style and pipfile requirements - maintained by the pipenv team
Stars: ✭ 74 (-19.57%)
Mutual labels:  pip, requirements, pipenv
rfc-bibtex
A command line tool that creates bibtex entries for IETF RFCs and Internet Drafts.
Stars: ✭ 43 (-53.26%)
Mutual labels:  pip, pipenv
index
A PEP 503-compliant Python package index specifically providing wheels built for Alpine Linux
Stars: ✭ 26 (-71.74%)
Mutual labels:  pip, pipenv
Pip Tools
A set of tools to keep your pinned Python dependencies fresh.
Stars: ✭ 5,387 (+5755.43%)
Mutual labels:  pip, requirements
ochrona-cli
A command line tool for detecting vulnerabilities in Python dependencies and doing safe package installs
Stars: ✭ 46 (-50%)
Mutual labels:  pip, requirements
Coronavirus Tracker Api
🦠 A simple and fast (< 200ms) API for tracking the global coronavirus (COVID-19, SARS-CoV-2) outbreak. It's written in python using the 🔥 FastAPI framework. Supports multiple sources!
Stars: ✭ 1,577 (+1614.13%)
Mutual labels:  pip, pipenv
Dephell
📦 🔥 Python project management. Manage packages: convert between formats, lock, install, resolve, isolate, test, build graph, show outdated, audit. Manage venvs, build package, bump version.
Stars: ✭ 1,730 (+1780.43%)
Mutual labels:  pip, pipenv
samp-server-cli
Control server configuration via command line (without manually editing server.cfg)
Stars: ✭ 14 (-84.78%)
Mutual labels:  pip
pipm
Python dependency management workflow using setup.cfg and requirements files without reinventing the wheels
Stars: ✭ 30 (-67.39%)
Mutual labels:  pip
mllint
`mllint` is a command-line utility to evaluate the technical quality of Python Machine Learning (ML) projects by means of static analysis of the project's repository.
Stars: ✭ 67 (-27.17%)
Mutual labels:  pip
pip-bash-completion
bash autocompletion for pip
Stars: ✭ 74 (-19.57%)
Mutual labels:  pip
poet-v
Vim Meets Poetry and Pipenv Virtual Environments
Stars: ✭ 57 (-38.04%)
Mutual labels:  pipenv
django-stomp
🔃 A simple implementation of STOMP with Django
Stars: ✭ 31 (-66.3%)
Mutual labels:  pipenv
YoutubeFloatingVideo
Simple Youtube Floating Video Library
Stars: ✭ 37 (-59.78%)
Mutual labels:  pip
AvaTax-REST-V2-Python-SDK
Sales Tax API SDK for Python and AvaTax REST
Stars: ✭ 17 (-81.52%)
Mutual labels:  pip
pythonfinder
PythonFinder: Cross Platform Search Tool for Finding Pythons
Stars: ✭ 30 (-67.39%)
Mutual labels:  pip
pydatagovgr
A Pythonic client for the official https://data.gov.gr API.
Stars: ✭ 38 (-58.7%)
Mutual labels:  pip
django-kcproject-starter
Kickstart Coding's Django Project Starter Template
Stars: ✭ 14 (-84.78%)
Mutual labels:  pipenv

ResolveLib

ResolveLib at the highest level provides a Resolver class that includes dependency resolution logic. You give it some things, and a little information on how it should interact with them, and it will spit out a resolution result.

Intended Usage

import resolvelib

# Things I want to resolve.
requirements = [...]

# Implement logic so the resolver understands the requirement format.
class MyProvider:
    ...

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 methods.

Terminology

The intention of this section is to unify the terms we use when talking about 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 all 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 heads straight.

Package

A thing that can be installed. A Package can have one or more versions available for installation.

Version

A string, usually in a number form, describing a snapshot of a Package. This number should increase when a Package posts a new snapshot, i.e a higher number means a more up-to-date snapshot.

Specifier

A collection of one or more Versions. This could be a wildcard, indicating that any Version is acceptable.

Candidate

A combination of a Package and a Version, i.e. a "concrete requirement". Python people sometimes call this a "locked" or "pinned" dependency. Both of "requirement" and "dependency", however, SHOULD NOT be used when describing a Candidate, to avoid confusion.

Some resolver architectures refer this as a "specification", but it is not used here to avoid confusion with a Specifier.

Requirement

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.

Contributing

Please see developer documentation.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].