# Replacement for Pkg.dependents() in 1.0?

**URL:** https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131
**Category:** General Usage
**Created:** [May 12, 2019, 5:29am UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131 "2019-05-12T05:29:52Z")
**Posts on this page:** 18
**Page:** 1

<div class="post-metadata">

### Author: ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)
#### Post date: [May 12, 2019, 5:29am UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/1 "2019-05-12T05:29:52Z")

</div>

I was using `Pkg.dependents("PkgName")` to get data for these force directed graphs of the Julia ecosystem last year. Now I need to actually use them and `Pkg.dependents()` is gone! any ideas how to build a list of all packages and their dependencies in 1.0?

 ![jplot](https://global.discourse-cdn.com/julialang/original/3X/3/f/3f5ca8ab3f1f67a6129999f4b6bec4ae8fa3e424.jpeg)

---

<div class="post-metadata">

### Author: ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)
#### Post date: [May 12, 2019, 5:54am UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/2 "2019-05-12T05:54:04Z")

</div>

That information is available in the manifest file of each package. In lack of a better alternative, maybe you could parse this, preferably using the already existing functionality to parse the manifest file that I guess exists in Pkg

---

<div class="post-metadata">

### Author: ![Nosferican](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nosferican/32/9275_2.png) [@Nosferican](https://discourse.julialang.org/u/Nosferican)
#### Post date: [May 12, 2019, 6:28am UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/3 "2019-05-12T06:28:02Z")

</div>

[https://github.com/Nosferican/DependenciesParser.jl](https://github.com/Nosferican/DependenciesParser.jl)

---

<div class="post-metadata">

### Author: ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)
#### Post date: [May 12, 2019, 6:40am UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/4 "2019-05-12T06:40:10Z")

</div>

Thanks, parsing seems to be the way… Any comments on how to use it to get the dependencies of a single package?

There should probably be a tool in Pkg for this, it’s just gone from being much easier than R to much harder than R.

---

<div class="post-metadata">

### Author: ![Nosferican](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nosferican/32/9275_2.png) [@Nosferican](https://discourse.julialang.org/u/Nosferican)
#### Post date: [May 12, 2019, 6:51am UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/5 "2019-05-12T06:51:01Z")

</div>

You can choose whether you want all dependencies or just direct dependencies. From the docs,

```julia
julia> installable("DataFrames")[2]
38-element Array{String,1}:
 "Base64"           
 "CategoricalArrays"
 "Compat"           
 "DataStructures"   
 "Dates"            
 "DelimitedFiles"   
 ⋮                  
 "StatsBase"        
 "TableTraits"      
 "Tables"           
 "Test"             
 "UUIDs"            
 "Unicode"

julia> installable("DataFrames", direct = true)[2]
36-element Array{String,1}:
 "Base64"           
 "CategoricalArrays"
 "Compat"           
 "DataStructures"   
 "Dates"            
 "DelimitedFiles"   
 ⋮                  
 "Statistics"       
 "StatsBase"        
 "TableTraits"      
 "Tables"           
 "Test"             
 "UUIDs"

```

---

<div class="post-metadata">

### Author: ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)
#### Post date: [May 12, 2019, 7:09am UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/6 "2019-05-12T07:09:37Z")

</div>

Oh sorry I didn’t see the docs!

---

<div class="post-metadata">

### Author: ![quinnj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/quinnj/32/11_2.png) [@quinnj](https://discourse.julialang.org/u/quinnj)
#### Post date: [May 21, 2019, 1:32pm UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/7 "2019-05-21T13:32:21Z")

</div>

Wait, I thought that `Pkg.dependents("X")` showed which packages _ **depended** _ on `X`. DependenciesParser.jl seems to just show the inverse: what are the dependencies of `X`. Right?

---

<div class="post-metadata">

### Author: ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)
#### Post date: [May 21, 2019, 1:53pm UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/8 "2019-05-21T13:53:59Z")

</div>

Both are fine for building a graph, but you could be right.

---

<div class="post-metadata">

### Author: ![tlnagy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tlnagy/32/5815_2.png) [@tlnagy](https://discourse.julialang.org/u/tlnagy)
#### Post date: [September 12, 2019, 11:01pm UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/9 "2019-09-12T23:01:27Z")

</div>

Is there any solution for this case. Specifically: determining all packages that directly depend **on** Package X? I.e. all children of a package in a dependency tree

---

<div class="post-metadata">

### Author: ![Nosferican](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nosferican/32/9275_2.png) [@Nosferican](https://discourse.julialang.org/u/Nosferican)
#### Post date: [September 13, 2019, 11:39pm UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/10 "2019-09-13T23:39:21Z")

</div>

You can get that information in a few lines.

```julia
using DependenciesParser
pkgs = DependenciesParser.data
pkgs_deps = getindex.(installable.(pkgs, direct = true), 2)
revdeps = [pkgs[findall(dep_pkg -> pkg ∈ dep_pkg, deps)] for pkg in pkgs ]

```

or for a single package,

```julia
pkgs[findall(dep_pkg -> "MyPkgName" ∈ dep_pkg, deps)]

```

---

<div class="post-metadata">

### Author: ![Nosferican](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nosferican/32/9275_2.png) [@Nosferican](https://discourse.julialang.org/u/Nosferican)
#### Post date: [September 14, 2019, 12:52pm UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/11 "2019-09-14T12:52:35Z")

</div>

Might be relevant, the registry will be purged of packages not compatible with Julia 1.0 within a month or so it will be nicer afterwards.

---

<div class="post-metadata">

### Author: ![julscha](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/julscha/32/10851_2.png) [@julscha](https://discourse.julialang.org/u/julscha)
#### Post date: [October 16, 2019, 12:52pm UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/12 "2019-10-16T12:52:55Z")

</div>

This is tool comes in really handy.  
What I don’t understand however is: installable(“DataFrames”, direct=true)[2] currently returns 39 elements/dependencies. The project.toml file of DataFrames only lists 16 dependencies in [deps]  
[https://github.com/JuliaData/DataFrames.jl/blob/master/Project.toml](https://github.com/JuliaData/DataFrames.jl/blob/master/Project.toml)  
I’m new to julia, so this might be obvious to someone else, but where do those additional 23 dependencies come from?

---

<div class="post-metadata">

### Author: ![Nosferican](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nosferican/32/9275_2.png) [@Nosferican](https://discourse.julialang.org/u/Nosferican)
#### Post date: [October 16, 2019, 2:32pm UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/13 "2019-10-16T14:32:37Z")

</div>

I believe the issues on how the standard libraries are being handled. During the transition, all projects had implied stdlib dependencies. I am probably going to update the package to get rid of some transition legacy code such as (`METADATA_compatible_uuid` in favor of better access to the metadata in the registry). The purge should have helped a lot in simplifying the code as well to handle deleted repositories. However, I am low-key also waiting for Julia 1.4 pre-releases so I may use the native functionality and maybe the focus of the package would change to providing things on top of that API

```julia
Pkg.dependencies # feature in Julia 1.4

```

---

<div class="post-metadata">

### Author: ![daschw](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/daschw/32/2926_2.png) [@daschw](https://discourse.julialang.org/u/daschw)
#### Post date: [March 25, 2020, 7:38pm UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/14 "2020-03-25T19:38:19Z")

</div>

I made a **really** basic package to list the packages directly depending on a package as a vector of strings that works on Julia 1.4. [GitHub - daschw/DirectDependents.jl: List all registered Julia packages depending on a package.](https://github.com/daschw/DirectDependents.jl)

---

<div class="post-metadata">

### Author: ![bjarthur](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bjarthur/32/9638_2.png) [@bjarthur](https://discourse.julialang.org/u/bjarthur)
#### Post date: [March 31, 2020, 10:52am UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/15 "2020-03-31T10:52:52Z")

</div>

DirectDependents.jl or something like it really needs to be added to Pkg. the need and question as to how to query the packages that depend on package X comes up quite frequently. thanks for this @daschw !

---

<div class="post-metadata">

### Author: ![pfitzseb](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pfitzseb/32/45566_2.png) [@pfitzseb](https://discourse.julialang.org/u/pfitzseb)
#### Post date: [March 31, 2020, 11:25am UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/17 "2020-03-31T11:25:26Z")

</div>

FWIW, there’s also some code for this in [DocumentationGenerator.jl](https://github.com/JuliaDocs/DocumentationGenerator.jl/blob/master/src/utils/pkgtools.jl) which also gives version-specific dependency information (and should support multiple packages with the same name).

---

<div class="post-metadata">

### Author: ![Lilith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lilith/32/27492_2.png) [@Lilith](https://discourse.julialang.org/u/Lilith)
#### Post date: [June 11, 2022, 11:51am UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/18 "2022-06-11T11:51:07Z")

</div>

It seems probable that a PR for that would be welcome, I’d certainly appreciate it 🙂

---

<div class="post-metadata">

### Author: ![Lilith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lilith/32/27492_2.png) [@Lilith](https://discourse.julialang.org/u/Lilith)
#### Post date: [June 11, 2022, 11:55am UTC](https://discourse.julialang.org/t/replacement-for-pkg-dependents-in-1-0/24131/19 "2022-06-11T11:55:56Z")

</div>

Not a Julia command, but this is available on JuliaHub  
[https://juliahub.com/ui/Packages/ExtendedDates/t4jDC/0.1.2?page=2](https://juliahub.com/ui/Packages/ExtendedDates/t4jDC/0.1.2?page=2)
