# How to install the latest package given dependency conflicts

**URL:** <https://discourse.julialang.org/t/how-to-install-the-latest-package-given-dependency-conflicts/56623>\
**Category:** General Usage\
**Created:** [March 6, 2021, 5:37pm UTC](https://discourse.julialang.org/t/how-to-install-the-latest-package-given-dependency-conflicts/56623 "2021-03-06T17:37:46Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![affans](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/affans/32/11911_2.png) [@affans](https://discourse.julialang.org/u/affans)\
**Post date:** [March 6, 2021, 5:37pm UTC](https://discourse.julialang.org/t/how-to-install-the-latest-package-given-dependency-conflicts/56623/1 "2021-03-06T17:37:46Z")

</div>

In a fresh environment I am trying to install `DifferentialEquations` and `Gnuplot 1.30`. If I install DifferentialEquations first, I get the latest copy of the package + all the correct dependencies (particular the dependency `OrdinaryDiffEq v5.51.2` which includes some critical bug fixes for me).

Then I add Gnuplot by `add Gnuplot`, but I am guessing due to dependencies it only installs Gnuplot 1.0 (and keeps all the Diff Eq packages at their current updated versions). However, I would like to use the latest Gnuplot version which is 1.3. I **can** force 1.30 by `add Gnuplot@1.30` but this severely downgrades some of the packages `DifferentialEquations` relied on. For example,

```julia
(julpack) pkg> add Gnuplot@1.3
  Resolving package versions...
Updating `~/julpack/Project.toml`
  [dc211083] + Gnuplot v1.3.0
Updating `~/julpack/Manifest.toml`
  [c3fe647b] ↓ AbstractAlgebra v0.13.6 ⇒ v0.11.2
  [4fba245c] ↓ ArrayInterface v3.1.3 ⇒ v2.14.17
  [4c555306] ↓ ArrayLayouts v0.6.2 ⇒ v0.3.8
  [aae01518] ↓ BandedMatrices v0.16.5 ⇒ v0.15.15
 ...
  [864edb3b] ↓ DataStructures v0.18.9 ⇒ v0.17.20
  [bcd4f6db] ↓ DelayDiffEq v5.29.0 ⇒ v5.24.1
  [2b5f629d] ↓ DiffEqBase v6.57.7 ⇒ v6.44.3
  [459566f4] ↓ DiffEqCallbacks v2.16.0 ⇒ v2.13.5
  [c894b116] ↓ DiffEqJump v6.13.0 ⇒ v6.10.0
  [31c24e10] ↓ Distributions v0.24.15 ⇒ v0.23.8
 ...
  [90137ffa] ↓ StaticArrays v1.0.1 ⇒ v0.12.5

```

In particular, you see the `OrdinaryDiffEq` was downgraded all the way to `[1dea7af3] ↓ OrdinaryDiffEq v5.51.2 ⇒ v5.39.1`. Some other packages like `StaticArrays` are downgraded to very old versions.

How do I solve this issue? Is there a tool that will generate the dependency graph so I can track down which package is forcing a downgrade of the Diff Eq suite? I tried adding the `#master` plan but this also causes the same downgrade issue. Evening `dev Gnuplot` causes the same issue.

Edit: Solved by tracing the dependencies. See post [How to install the latest package given dependency conflicts - #6 by affans](https://discourse.julialang.org/t/how-to-install-the-latest-package-given-dependency-conflicts/56623/6)

---

<div class="post-metadata">

**Author:** ![StatisticalMouse](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/statisticalmouse/32/43370_2.png) [@StatisticalMouse](https://discourse.julialang.org/u/StatisticalMouse)\
**Post date:** [March 6, 2021, 5:48pm UTC](https://discourse.julialang.org/t/how-to-install-the-latest-package-given-dependency-conflicts/56623/2 "2021-03-06T17:48:07Z")

</div>

This might help, but doesn’t solve it.

> **[Understanding package version restrictions in Julia](https://bkamins.github.io/julialang/2020/05/11/package-version-restrictions.html)**
>
> This post was written for Julia 1.4.1.

---

<div class="post-metadata">

**Author:** ![affans](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/affans/32/11911_2.png) [@affans](https://discourse.julialang.org/u/affans)\
**Post date:** [March 6, 2021, 5:48pm UTC](https://discourse.julialang.org/t/how-to-install-the-latest-package-given-dependency-conflicts/56623/3 "2021-03-06T17:48:10Z")

</div>

I also don’t understand why the downgrade is happening. If I track down the dependencies of Gnuplot on [JuliaHub](https://juliahub.com/ui/Packages/Gnuplot/4mcTU/1.3.0?t=1), nothing really seems to depend on Diff Eq.

Another way to check this is to look at the dependents of `DifferentialEquations` on [JuliaHub](https://juliahub.com/ui/Packages/DifferentialEquations/UQdwS/6.16.0?t=2). It dosn’t seem like there is anything that connects back to Gnuplot somehow.

---

<div class="post-metadata">

**Author:** ![affans](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/affans/32/11911_2.png) [@affans](https://discourse.julialang.org/u/affans)\
**Post date:** [March 6, 2021, 5:57pm UTC](https://discourse.julialang.org/t/how-to-install-the-latest-package-given-dependency-conflicts/56623/4 "2021-03-06T17:57:54Z")

</div>

Something else I noticed. If I pin `OrdinaryDiffEq` to 5.51.2 which is the one with bug fixes, I can force an error but the error dosn’t make sense to me.

```julia
(julpack) pkg> add Gnuplot@1.3.0
  Resolving package versions...
ERROR: Unsatisfiable requirements detected for package DataStructures [864edb3b]:
 DataStructures [864edb3b] log:
 ├─possible versions are: [0.9.0, 0.10.0, 0.11.0-0.11.1, 0.12.0, 0.13.0, 0.14.0-0.14.1, 0.15.0, 0.16.1, 0.17.0-0.17.20, 0.18.0-0.18.9] or uninstalled
 ├─restricted by compatibility requirements with OrdinaryDiffEq [1dea7af3] to versions: 0.18.0-0.18.9
 │ └─OrdinaryDiffEq [1dea7af3] log:
 │ ├─possible versions are: [4.0.0, 4.1.0, 4.2.0, 4.3.0, 4.4.0-4.4.1, 4.5.0, 4.6.0, 4.7.0-4.7.1, 4.8.0-4.8.1, 4.9.0, 4.10.0, 4.11.0-4.11.1, 4.12.0-4.12.4, 4.13.0, 4.14.0, 4.15.0-4.15.1, 4.16.0-4.16.5, 4.17.0-4.17.2, 4.18.0-4.18.3, 4.19.0, 4.20.0, 4.21.0-4.21.1, 5.0.0, 5.1.0-5.1.4, 5.2.0-5.2.1, 5.3.0, 5.4.0-5.4.1, 5.5.0, 5.6.0-5.6.1, 5.7.0-5.7.1, 5.8.0-5.8.1, 5.9.0, 5.10.0, 5.11.0-5.11.1, 5.12.0, 5.13.0, 5.14.0, 5.15.0-5.15.1, 5.16.0, 5.17.0-5.17.2, 5.18.0, 5.19.0, 5.20.0-5.20.1, 5.21.0, 5.22.0, 5.23.0, 5.24.0, 5.25.0, 5.26.0-5.26.8, 5.27.0-5.27.1, 5.28.0-5.28.1, 5.29.0, 5.30.0, 5.31.0, 5.32.0-5.32.2, 5.33.0, 5.34.0-5.34.1, 5.35.0-5.35.5, 5.36.0-5.36.1, 5.37.0, 5.38.0-5.38.3, 5.39.0-5.39.1, 5.40.0, 5.41.0, 5.42.0-5.42.10, 5.43.0, 5.44.0, 5.45.0-5.45.1, 5.46.0, 5.47.0-5.47.1, 5.48.0, 5.49.0-5.49.3, 5.50.0-5.50.2, 5.51.0-5.51.2] or uninstalled
 │ └─restricted to versions 5.51.2 by an explicit requirement, leaving only versions 5.51.2
 └─restricted by compatibility requirements with Gnuplot [dc211083] to versions: 0.17.0-0.17.20 — no versions left
   └─Gnuplot [dc211083] log:
     ├─possible versions are: [1.0.0, 1.1.0, 1.2.0, 1.3.0] or uninstalled
     └─restricted to versions 1.3.0 by an explicit requirement, leaving only versions 1.3.0

```

It says `possible versions are [for OrdinaryDiffEq] are [5.51.0 - 5.51.2]` so it shouldn’t really downgrade since… well I have 5.51.2 for OrdinaryDiffEq

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [March 6, 2021, 6:02pm UTC](https://discourse.julialang.org/t/how-to-install-the-latest-package-given-dependency-conflicts/56623/5 "2021-03-06T18:02:27Z")

</div>

I would assume that both Gnuplot and OrdinaryDiffEq depend on DataStructures, directly or indirectly, but require mutually contradictory versions unless one of them is held back to an older version.

Update: Proposed fix in [https://github.com/gcalderone/Gnuplot.jl/pull/41](https://github.com/gcalderone/Gnuplot.jl/pull/41).

---

<div class="post-metadata">

**Author:** ![affans](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/affans/32/11911_2.png) [@affans](https://discourse.julialang.org/u/affans)\
**Post date:** [March 6, 2021, 6:15pm UTC](https://discourse.julialang.org/t/how-to-install-the-latest-package-given-dependency-conflicts/56623/6 "2021-03-06T18:15:37Z")

</div>

Thanks. Based on our Slack discussion the problem is that Gnuplot depends on `DataStructures = "^0.17"` while `OrdinaryDiffEq` depends on `DataStructures = "0.18"`.

Although I was under the impression that `^0.17` means anything 0.17 and above but not 1.0 since it changes the left most digit. **This is not true**. `^0.17` means anything `0.17.x` but not `0.18`.

---

<div class="post-metadata">

**Author:** ![FPGro](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fpgro/32/20822_2.png) [@FPGro](https://discourse.julialang.org/u/FPGro)\
**Post date:** [March 7, 2021, 10:38am UTC](https://discourse.julialang.org/t/how-to-install-the-latest-package-given-dependency-conflicts/56623/7 "2021-03-07T10:38:52Z")

</div>

Just for [reference](https://julialang.github.io/Pkg.jl/v1/compatibility/#compat-pre-1.0): “A pre-1.0 version with non-zero minor version ( `0.a.b` with `a != 0` ) is considered compatible with versions with the same minor version and smaller or equal patch versions ( `0.a.c` with `c <= b` ); i.e., the versions 0.2.2 and 0.2.3 are compatible with 0.2.1 and 0.2.0. Versions with a major version of 0 and different minor versions are not considered compatible, so the version 0.3.0 might have breaking changes from 0.2.0.”
