= Dependency graph
A <dependency graph> represents requirements as a <directed graph>. Choose an explicit edge convention: here $A\to B$ means that component $A$ requires component $B$. A direct edge records an immediate requirement; a directed path records a transitive requirement. Pip's resolver must discover both a requested <software package>'s requirements and the requirements of its dependencies.<Dependency Resolution in the pip documentation>[How it works]{ref}
For example, if application $A$ requires <software library> $B$ and $B$ requires $C$, changing $C$ can affect $A$ even without an edge $A\to C$. In an acyclic build <dependency graph>, a <topological order> of the reversed edges puts prerequisites first. Cycles require special treatment: the graph alone does not establish that a set of mutually dependent build steps can execute. Edge labels can additionally record required versions or build configurations.
Back to article page