Closed stuarteberg closed 4 years ago
LGTM. I've always wondered why that circular dependency was there :). Thanks!
BTW, the pip
dependency is not written into the recipe's metadata. It is artificially added by conda itself, and can be disabled via a config setting in your .condarc
file:
Long ago, the conda team decided to introduce an artificial dependency between python and pip, to ensure that no users ever install
python
without also installingpip
. That means that the dependency graph for every python package now contains a cycle:python
<-->pip
.That cycle introduces noise in the
conda depgraph
output for any python package. I think it's better for most users if that dependency is simply removed from the graph before visualizing it.For example, here is the output for
conda depgraph out click
with and without the cycle.click dependencies (without pip)
``` ┌─────┐ │click│ └──┬──┘ │ v ┌─────────────────┐ │ python │ └┬┬┬─────┬──┬─┬─┬┬┘ │││ │ │ │ ││ │││ │ │ │ │└──────┐ ┌─────┼┘│ │ │ │ │ │ │ │ │ │ │ │ │ │ v │ │ │ │ │ │ │ ┌──────┐ │ │ │ │ │ │ │ │sqlite│ │ │ │ │ │ │ │ └─┬──┬─┘ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └───┐│ │ │ │ │ └────┐ │ │ ┌────┼┘ │ │ │ │ │ │ │ │ v v │ │ │ │ │ │ │ ┌────────┐ │ │ │ │ │ │ │ │readline│ │ │ │ │ │ │ │ └────┬───┘ │ │ │ │ │ │ └────┐ │┌─────┘ │ │ │ │ │ │ ││ ┌─────┘ │ └──┼────┐ │ ┌───┼─┘│ │ │ │ │ │ │ │ │ │ │ │ │ v v │ │ v v v │ ┌───────┐ │ │┌───┐ ┌───────┐ ┌──────┐ │ │ncurses│ │ ││tk │ │openssl│ │libffi│ │ └───┬───┘ │ │└─┬─┘ └───┬───┘ └───┬──┘ │ │ │ │ │ │ │ │ │ │ │ │ └───────┐ │ │ └─────┼──┼──┼┐ │ │ │ ┌───────┼──┘ ││ │ │ │ │ │┌────┘│ │ │ │ │ ││ │┌─────────────┼─┘ │ │ ││ ││ ┌───────────┼──────┘ │ ││ ││ │ │ v vv vv v v ┌───┐ ┌─────┐ ┌───────┐ ┌───────────────┐ │xz │ │zlib │ │libcxx │ │ca-certificates│ └───┘ └─────┘ └───────┘ └───────────────┘ ```click dependencies (with pip)
``` ┌─────────┐ │ pip │ └─┬─────┬┬┘ │^ ││ ┌────────┘│ ┌┘│ │ │ │ │ v │ │ │ ┌─────┐ │ │ │ │wheel│ │ │ │ └─┬─┬─┘ │ │ │ │ │ │ │ │ │ └───┐ │ │ │ │ │ └───┼─┼┐ │ │ ┌────┼─┘│ │ │ │ ┌┼──┘ │ v v ││ │ ┌──────────┐││ │ │setuptools│││ │ └───┬──┬───┘││ │ │ │ ││ └─────┼─┐└───┐││ ┌───┘ │ │││ │ │ │││ v │ │││ ┌───────┐ │ │││ ┌─────┐ │certifi│ │ │││ │click│ └───┬───┘ │ │││ └──┬──┘ │ │ │││ │ │ │ ││└┐ │ └─────┼─┐ ││ │ │ │ │ ││ │ │ v v v│ v v ┌─────────┴───────┐ │ python │ └┬┬┬─────┬──┬─┬─┬┬┘ │││ │ │ │ ││ │││ │ │ │ │└──────┐ ┌─────┼┘│ │ │ │ │ │ │ │ │ │ │ │ │ │ v │ │ │ │ │ │ │ ┌──────┐ │ │ │ │ │ │ │ │sqlite│ │ │ │ │ │ │ │ └─┬──┬─┘ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └───┐│ │ │ │ │ └────┐ │ │ ┌────┼┘ │ │ │ │ │ │ │ │ v v │ │ │ │ │ │ │ ┌────────┐ │ │ │ │ │ │ │ │readline│ │ │ │ │ │ │ │ └────┬───┘ │ │ │ │ │ │ └────┐ │┌─────┘ │ │ │ │ │ │ ││ ┌─────┘ │ └──┼────┐ │ ┌───┼─┘│ │ │ │ │ │ │ │ │ │ │ │ │ v v │ │ v v v │ ┌───────┐ │ │┌───┐ ┌───────┐ ┌──────┐ │ │ncurses│ │ ││tk │ │openssl│ │libffi│ │ └───┬───┘ │ │└─┬─┘ └───┬───┘ └───┬──┘ │ │ │ │ │ │ │ │ │ │ │ │ └───────┐ │ │ └─────┼──┼──┼┐ │ │ │ ┌───────┼──┘ ││ │ │ │ │ │┌────┘│ │ │ │ │ ││ │┌─────────────┼─┘ │ │ ││ ││ ┌───────────┼──────┘ │ ││ ││ │ │ v vv vv v v ┌───┐ ┌─────┐ ┌───────┐ ┌───────────────┐ │xz │ │zlib │ │libcxx │ │ca-certificates│ └───┘ └─────┘ └───────┘ └───────────────┘ ```FWIW, the python/pip cycle created problems for
conda-build
, so evenconda
itself has special handling of this dependency in at least one place. (I wrote it.)