A command-line utility to plot Conda dependency graphs.
Visualizing the dependency graph of Conda packages comes in handy for understanding why a parcticular package is installed. conda-depgraph
plots the graph on the command line, so there's no need to fire up a Jupyter notebook.
For example, listing all the packages that (indirectly) depend on MKL in a particular environment is as easy as
$ conda depgraph in mkl
┌──────────┐ ┌──────┐
│matplotlib│ │pyfits│
└─┬────────┘ └───┬──┘
│ │
│ ┌────────────┘
│ │
v v
┌─────┐ ┌──────────┐
│numpy│ │numpy-base│
└──┬──┘ └─┬────────┘
│ │
└────┐ │
│ │
v v
┌─────┐
│ mkl │
└─────┘
conda-depgraph
can be installed as follows:
$ conda install -n base -c omegacen conda-depgraph
It can either be installed into its own conda environment, or into the base environment.
Installing it in the base environment has the benefit that the conda depgraph
command is available in all other environments. However, you will have to make sure that java
is available on $PATH
.
Installing it in its own environment automatically ensures it can find java
, but then you will have to activate that environment before you can run conda depgraph
.
After installation a new Conda command is available:
$ conda depgraph [--help]
[--from-channels]
[--from-env [--name=<ENV_NAME>] [--prefix=<ENV_PATH>]]
[--output-names] [--output-graph] [--output-graphml]
[in [--distance=<DISTANCE>] <PACKAGE>]
[out [--distance=<DISTANCE>] <PACKAGE>]
[inout [--distance=<DISTANCE>] <PACKAGE>]
depgraph
can plot dependency graphs from either cached repository data, or from an existing Conda environment. The latter is the default behaviour. If the target environment is not specified via either --name
or --prefix
, the current environment is used.
The subcommands (in
, out
, inout
) restrict the output to a subgraph of the full dependency graph of the environment. The subcommands can be arbitrarily nested to iteratively restrict the output graph.
The direct dependencies of conda:
$ conda depgraph --name=base out --distance=1 conda
┌─────────────┐
│ conda │
└─┬─┬───┬┬┬─┬─┘
│ │ │││ │
┌─────────────────┘ │ │││ └─────────────────────────┐ │ ┌──────┘ ││└─────────────────────┐ │ │ │ └┼──────────┐ │ │ │ │ │ │ │ │ v v v v v │
┌──────────┐ ┌───────────┐ ┌───────┐ ┌─────────┐ ┌────────┐ │ │setuptools│ │ruamel_yaml│ │pycosat│ │pyopenssl│ │requests│ │ └─────┬────┘ └─────┬─────┘ └┬──────┘ └────┬────┘ └────┬───┘ │ │ │ │ │ │ │ │ └──────┐ │ ┌───────────┘ │ │ └─────────────────┐ │ │ │ ┌─────────────────────┘ │ │ │ │ │ │ ┌─────────────────────────┘ │ │ │ │ │ │ v v v v v v ┌─────────────┐ │ python │ └─────────────┘
The immediate neighborhood of sqlite:
$ conda depgraph --name=base inout --distance==1 sqlite
┌──────┐
│python│
└───┬──┘
│
v
┌──────┐
│sqlite│
└┬───┬─┘
│ │
│ └────┐
│ │
v v
┌───────┐ ┌────┐ │libedit│ │zlib│ └───────┘ └────┘
Everything in between sqlite and ncurses:
$ conda depgraph --name base out sqlite in ncurses
┌──────┐
│sqlite│
└───┬──┘
│
v
┌───────┐
│libedit│
└───┬───┘
│
v
┌───────┐
│ncurses│
└───────┘
A list of the direct dependencies of Python, plus Python itself:
$ conda depgraph --name base --output-names out --distance=1 python
libcxx
libffi
ncurses
openssl
python
readline
sqlite
tk
xz
zlib
A list of all packages that require Python, plus Python itself:
$ conda depgraph --name base --output-names in --distance=1 python
asn1crypto
beautifulsoup4
certifi
cffi
chardet
click
conda
conda-build
conda-verify
cryptography
filelock
future
glob2
idna
jinja2
markupsafe
pip
pkginfo
psutil
py-lief
pycosat
pycparser
pycrypto
pyopenssl
pysocks
python
python-libarchive-c
python.app
pytz
pyyaml
requests
ruamel_yaml
setuptools
six
tqdm
urllib3
wheel
Use data from cached channels:
$ conda depgraph --from-channels out --distance=1 jupyter
┌───────────────┐
│ jupyter │
└┬┬───┬────┬┬┬┬─┘
││ │ ││││
││ │ │││└──────────────────┐
┌────────┼┘ │ │││ │ │ │ │ │││ │ v │ │ │││ │
┌──────────┐ │ │ │││ │ │ipywidgets│ │ │ │││ │ └──┬──┬──┬─┘ │ │ │││ │ │ │ │ │ │ │││ │
┌───┘ │ │ │ │ │││ │ │┌─────┘ │ │ │ │└┼─────────┐ │ ││ └─────┼─┐ │ │ │ │ │ ││ ┌───────┘ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ ││ v v v │ │ v │ ││ ┌─────────┐ ┌────────┐ │ │ ┌───────────────┐ │ ││ │qtconsole│ │notebook│ │ │ │jupyter_console│ │ ││ └───┬──┬──┘ └──┬─┬─┬─┘ │ │ └─────┬───┬─────┘ │ ││ │ │ │ │ │ │ └──┐ │ │ │ ││ │ │ │ │ │ └────┼────┼┐ │ │ ││ │ │ │ │ └──────┐ │ ││ │ │ │└─────┼──┼┐ │ │ │ │ ││ │ │ │ ┌┼──┼┼──────┘ │ │ │ ││ │ │ │ ││ ││ ┌──┼────────┼─┼────┘│ │ │ │ ││ ││ │ ┌┼────────┼─┼─────┼──┼───────┘ │ ││ ││ │ ││ │ │ │ │ │ ││ vv v vv v v │ │ │ ││ ┌───────────┐ ┌─────────┐ │ │ │ ││ │ ipykernel │ │nbconvert│ │ │ │ ││ └─────┬─────┘ └┬────────┘ │ │ │ ││ │ │ ┌─────────┘ │ │ ││ └───────┐ │ │ ┌─────────┘ │ └┼─────────────┐ │ │ │ │ │ └───────────┐ │ │ │ │ │ └────────────────┐ │ │ │ │ │ │ │ │ │ │ │ │ │ v v v v v v v ┌───────────────┐ │ python │ └───────────────┘