# How to force an update?

**URL:** <https://discourse.julialang.org/t/how-to-force-an-update/73071>\
**Category:** Package Management\
**Tags:** question, package\
**Created:** [December 14, 2021, 11:26am UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071 "2021-12-14T11:26:10Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![ForceBru](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/forcebru/32/21389_2.png) [@ForceBru](https://discourse.julialang.org/u/ForceBru)\
**Post date:** [December 14, 2021, 11:26am UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/1 "2021-12-14T11:26:10Z")

</div>

For some reason my environment has `StatsFuns v0.9.7`, even though `StatsFuns v0.9.14` is available, but I cannot update it:

```julia
(???) pkg> up StatsFuns
    Updating registry at `~/.julia/registries/General.toml`
  No Changes to `~/.../Project.toml`
  No Changes to `~/.../Manifest.toml`

```

I tried to specify the version manually using `@0.9.14` and `up --major`, but it still says “No Changes”.

Apparently, some package I have installed is only compatible with this version of StatsFuns, but [I can’t tell which one](https://github.com/JuliaLang/Pkg.jl/issues/1655). Is it possible to disregard all compatibility constraints and update everything anyway?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [December 14, 2021, 11:35am UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/2 "2021-12-14T11:35:46Z")

</div>

What happens if you do `add StatsFuns@0.9.14`?

---

<div class="post-metadata">

**Author:** ![ForceBru](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/forcebru/32/21389_2.png) [@ForceBru](https://discourse.julialang.org/u/ForceBru)\
**Post date:** [December 14, 2021, 11:51am UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/3 "2021-12-14T11:51:29Z")

</div>

This updates `StatsFuns` to `0.9.14`, updates some other packages, including:

- PlutoUI from 0.7.1 to 0.7.23 (that’s 22 patch versions!);
- TimeSeries from 0.20.1 to 0.23.0 (three minor versions);
- Reexport from 0.2.0 to 1.2.2 (that’s one _major_ version!)

Not sure whether these packages follow semantic versioning, but one _major_ version is clearly a major upgrade that was somehow blocked by StatsFuns alone, I guess?

This command also downgrades:

- Ipopt from 0.9.0 to _0.7.0_ (!!);
- JuMP from 0.22.1 to 0.21.10
- MathOptInterface from 0.10.6 to 0.9.22

So, all my optimization packages are at least one minor version down for some reason.

* * *

Then I executed `up`, which upgraded optimization packages back up and basically reverted all other changes, downgrading StatsFuns to 0.9.7 and Reexport to 0.2.0.

TBH, I have no clue what’s causing this…

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [December 14, 2021, 12:35pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/4 "2021-12-14T12:35:22Z")

</div>

> [@ForceBru](#):
>
> So, all my optimization packages are at least one minor version down for some reason.
> 
> TBH, I have no clue what’s causing this…

I have all of those in the same project at the latest version:

```julia
(jl_4k3Nlr) pkg> st
Status `/tmp/jl_4k3Nlr/Project.toml`
  [b6b21f68] Ipopt v0.9.1
  [4076af6c] JuMP v0.22.1
  [b8f27783] MathOptInterface v0.10.6
  [7f904dfe] PlutoUI v0.7.23
  [189a3867] Reexport v1.2.2
  [4c63d2b9] StatsFuns v0.9.14
  [9e3dc215] TimeSeries v0.23.0

```

What happens if you create a new environment `pkg> activate --temp` and do `pkg> add add Ipopt JuMP MathOptInterface StatsFuns PlutoUI TimeSeries Reexport`?

---

<div class="post-metadata">

**Author:** ![ForceBru](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/forcebru/32/21389_2.png) [@ForceBru](https://discourse.julialang.org/u/ForceBru)\
**Post date:** [December 14, 2021, 12:39pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/5 "2021-12-14T12:39:43Z")

</div>

> [@kristoffer.carlsson](#):
>
> add Ipopt JuMP MathOptInterface StatsFuns PlutoUI TimeSeries Reexport

Then I get the exact same output as in your post.

BTW, if I run `add StatsFuns@0.9.14 JuMP@0.22.1` in my original environment (because I want _both_ of these packages to be at these versions), `Symbolics.jl` gets downgraded from 4.2.0 to **0.1.32**. That’s _four major versions_!

Guess I’ll have to nuke my current environment and start a new one

---

<div class="post-metadata">

**Author:** ![josuagrw](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/josuagrw/32/1015_2.png) [@josuagrw](https://discourse.julialang.org/u/josuagrw)\
**Post date:** [December 14, 2021, 12:49pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/6 "2021-12-14T12:49:17Z")

</div>

There are certain packages that just by their presence cause these issues. For example, I one had trouble upgrading and eventually I realized `BlackBoxOptim` was stalling my entire environment

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [December 14, 2021, 12:50pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/7 "2021-12-14T12:50:17Z")

</div>

[https://github.com/JuliaSymbolics/SymbolicUtils.jl/pull/395](https://github.com/JuliaSymbolics/SymbolicUtils.jl/pull/395) needs to be put into a release so that DynamicPolynomials 0.4 is allowed for SymbolicUtils. You can see it from

```julia
(jl_4k3Nlr) pkg> add Symbolics@4 DynamicPolynomials@0.4
   Resolving package versions...
ERROR: Unsatisfiable requirements detected for package SymbolicUtils [d1185830]:
 SymbolicUtils [d1185830] log:
 ├─possible versions are: 0.1.0-0.18.1 or uninstalled
 ├─restricted by compatibility requirements with Symbolics [0c5d862f] to versions: 0.18.0-0.18.1
 │ └─Symbolics [0c5d862f] log:
 │ ├─possible versions are: 0.1.0-4.2.0 or uninstalled
 │ └─restricted to versions 4.2.0 by an explicit requirement, leaving only versions 4.2.0
 └─restricted by compatibility requirements with DynamicPolynomials [7c1d4256] to versions: 0.1.0-0.12.1 or uninstalled — no versions left
   └─DynamicPolynomials [7c1d4256] log:
     ├─possible versions are: 0.1.0-0.4.1 or uninstalled
     └─restricted to versions 0.4 by an explicit requirement, leaving only versions 0.4.0-0.4.1

```

---

<div class="post-metadata">

**Author:** ![ForceBru](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/forcebru/32/21389_2.png) [@ForceBru](https://discourse.julialang.org/u/ForceBru)\
**Post date:** [December 14, 2021, 12:58pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/8 "2021-12-14T12:58:03Z")

</div>

Okay, I’ve just uninstalled all packages and ran:

```
add BenchmarkTools CairoMakie Distributions ForwardDiff Ipopt JuMP LoopVectorization PlutoUI ProgressMeter QuadGK Revise ShiftedArrays Symbolics UnicodePlots

```

This installed `PlutoUI v0.7.1`, but my previous environment had `PlutoUI v0.7.23`. This also installed `StatsFuns v0.9.7` in the manifest _again_, but `v0.9.14` is already available. Why did it not install the latest version? Why not auto-upgrade to a patch version? `up --manifest --patch` says “No Changes”.

This is all to say that it would be vey nice if Pkg could tell me that such and such packages aren’t at the latest version because such and such other packages are blocking the update, like in this issue [https://github.com/JuliaLang/Pkg.jl/issues/1655](https://github.com/JuliaLang/Pkg.jl/issues/1655)

* * *

Looks like Symbolics was the package messing with my environment. I did `rm Symbolics`, and now I’m at all the latest versions.

---

<div class="post-metadata">

**Author:** ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)\
**Post date:** [December 14, 2021, 2:21pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/9 "2021-12-14T14:21:36Z")

</div>

Just come over to the bleeding edge:

```julia
               _
   _ _ _(_)_ | Documentation: https://docs.julialang.org
  (_) | (_) (_) |
   _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` | |
  | | |_| | | | (_| | | Version 1.8.0-DEV.1136 (2021-12-14)
 _/ |\ __'_|_|_|\__'_| | Commit 6330398088 (0 days old master)
|__/ |

(@v1.8) pkg> add DataFrames@0.15
   [...]

(@v1.8) pkg> st
Status `...\.julia\environments\v1.8\Project.toml`
  [a93c6f00] DataFrames v0.15.2

(@v1.8) pkg> st --outdated
Status `...\.julia\environments\v1.8\Project.toml`
  [a93c6f00] DataFrames v0.15.2 (<v1.3.0)

```

(the syntax highlighting is nicer in the REPL than Discourse is showing here)

---

<div class="post-metadata">

**Author:** ![ForceBru](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/forcebru/32/21389_2.png) [@ForceBru](https://discourse.julialang.org/u/ForceBru)\
**Post date:** [December 14, 2021, 2:53pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/10 "2021-12-14T14:53:50Z")

</div>

> [@nilshg](#):
>
> `0 days old master`

Wow, that’s bleeding edge for sure! I have to try this out now

---

<div class="post-metadata">

**Author:** ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)\
**Post date:** [December 14, 2021, 2:56pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/11 "2021-12-14T14:56:14Z")

</div>

This got merged 4 months ago, so you can use an older master if you like 😉

---

<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:** [December 14, 2021, 4:41pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/12 "2021-12-14T16:41:03Z")

</div>

Would it also say _why_ a package is out of date and how to fix it? (i.e. which package depends on outdated versions of other packages)

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [December 14, 2021, 4:51pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/13 "2021-12-14T16:51:55Z")

</div>

Yes, to the best of its abilities:

```julia
(jl_9Bonir) pkg> add Symbolics DynamicPolynomials
...

(jl_9Bonir) pkg> st --outdated
Status `/tmp/jl_9Bonir/Project.toml`
  [7c1d4256] DynamicPolynomials v0.3.21 (<v0.4.1): SymbolicUtils

```

And everything in the manifest:

```julia
(jl_9Bonir) pkg> st -m --outdated
Status `/tmp/jl_9Bonir/Manifest.toml`
  [7c1d4256] DynamicPolynomials v0.3.21 (<v0.4.1): SymbolicUtils
  [102ac46a] MultivariatePolynomials v0.3.18 (<v0.4.2): DynamicPolynomials, SymbolicUtils
  [d8a4904e] MutableArithmetics v0.2.22 (<v0.3.1): DynamicPolynomials, MultivariatePolynomials
  [276daf66] SpecialFunctions v1.8.1 (<v2.0.0): StatsFuns, SymbolicUtils
  [4c63d2b9] StatsFuns v0.9.7 (<v0.9.14)

```

---

<div class="post-metadata">

**Author:** ![ForceBru](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/forcebru/32/21389_2.png) [@ForceBru](https://discourse.julialang.org/u/ForceBru)\
**Post date:** [December 14, 2021, 6:10pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/14 "2021-12-14T18:10:09Z")

</div>

What’s up with StatsFuns, though? For example, according to [the documentation](https://pkgdocs.julialang.org/dev/api/#Pkg.status), `SpecialFunctions v1.8.1 (<v2.0.0): StatsFuns, SymbolicUtils` means that constraints in StatsFuns and SymbolicUtils prevent Pkg from updating SpecialFunctions to v2.0.0, which is perfectly understandable. But why is it not possible to update StatsFuns itself?

The output just says that this package is not at its latest version, and there’s no reason for it to be at this old version. Thus, StatsFuns can be updated, right? For some reason, `up --manifest` actually updates this package on Julia 1.8, but this downgrades optimization packages, as shown in my earlier post:

```julia
(jl_MD9i7u) pkg> st -m --outdated
Status `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_MD9i7u/Manifest.toml`
  [7c1d4256] DynamicPolynomials v0.3.21 (<v0.4.1): SymbolicUtils
  [b6b21f68] Ipopt v0.6.1 (<v0.9.1)
  [7d188eb4] JSONSchema v0.3.4 (<v1.0.0): MathOptInterface
  [4076af6c] JuMP v0.21.10 (<v0.22.1)
  [b8f27783] MathOptInterface v0.9.22 (<v0.10.6): Ipopt, JuMP
  [0a4f8689] MathTeXEngine v0.2.1 (<v0.3.3): Makie
  [102ac46a] MultivariatePolynomials v0.3.18 (<v0.4.2): DynamicPolynomials, SymbolicUtils
  [d8a4904e] MutableArithmetics v0.2.22 (<v0.3.1): DynamicPolynomials, JuMP, MathOptInterface, MultivariatePolynomials
  [276daf66] SpecialFunctions v1.8.1 (<v2.0.0): JuMP, SymbolicUtils

```

Now Ipopt and JuMP have apparently no reason to be at these old versions, right? I run `up --manifest`, and they indeed get updated! This downgrades StatsFuns back to v0.9.7 and, for example, Reexport from v1.2.2 to v0.2.0.

* * *

Looks like I discovered an “update loop”… Full reproducible example:

```julia
pkg> activate --temp
  Activating new project at `/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr`

(jl_DG9aAr) pkg> add BenchmarkTools CairoMakie Distributions ForwardDiff Ipopt JuMP LoopVectorization PlutoUI ProgressMeter QuadGK Revise ShiftedArrays Symbolics UnicodePlots
   Resolving package versions...
    Updating `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr/Project.toml`
  [6e4b80f9] + BenchmarkTools v1.2.2
  [13f3f980] + CairoMakie v0.6.6
  [31c24e10] + Distributions v0.25.36
  [f6369f11] + ForwardDiff v0.10.24
  [b6b21f68] + Ipopt v0.9.1
  [4076af6c] + JuMP v0.22.1
  [bdcacae8] + LoopVectorization v0.12.99
  [7f904dfe] + PlutoUI v0.7.1
  [92933f4c] + ProgressMeter v1.7.1
  [1fd47b50] + QuadGK v2.4.2
  [295af30f] + Revise v3.2.0
  [1277b4bf] + ShiftedArrays v1.0.0
  [0c5d862f] + Symbolics v4.2.0
  [b8865327] + UnicodePlots v2.5.0
    Updating `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr/Manifest.toml`
  [621f4979] + AbstractFFTs v1.0.1
  [1520ce14] + AbstractTrees v0.3.4
  ...
(jl_DG9aAr) pkg> st -m --outdated
Status `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr/Manifest.toml`
  [7c1d4256] DynamicPolynomials v0.3.3 (<v0.4.1): SymbolicUtils
  [0a4f8689] MathTeXEngine v0.2.1 (<v0.3.3): Makie
  [102ac46a] MultivariatePolynomials v0.3.2 (<v0.4.2): DynamicPolynomials, SymbolicUtils
  [7f904dfe] PlutoUI v0.7.1 (<v0.7.23)
  [189a3867] Reexport v0.2.0 (<v1.2.2): DynamicPolynomials
  [276daf66] SpecialFunctions v1.8.1 (<v2.0.0): JuMP, StatsFuns, SymbolicUtils
  [4c63d2b9] StatsFuns v0.9.7 (<v0.9.14)

(jl_DG9aAr) pkg> # looks like PlutoUI and StatsFuns can be updated, so update them!

(jl_DG9aAr) pkg> up -m
    Updating registry at `~/.julia/registries/General.toml`
    Updating `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr/Project.toml`
  [b6b21f68] ↓ Ipopt v0.9.1 ⇒ v0.6.1
  [4076af6c] ↓ JuMP v0.22.1 ⇒ v0.21.10
  [7f904dfe] ↑ PlutoUI v0.7.1 ⇒ v0.7.23
    Updating `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr/Manifest.toml`
  [6e696c72] + AbstractPlutoDingetjes v1.1.2
  [7c1d4256] ↑ DynamicPolynomials v0.3.3 ⇒ v0.3.21
  [cd3eb016] + HTTP v0.9.17
  [47d2ed2b] + Hyperscript v0.0.4
  [ac1192a8] + HypertextLiteral v0.9.3
  [b5f81e59] + IOCapture v0.2.2
  [83e8ac13] + IniFile v0.5.0
  [b6b21f68] ↓ Ipopt v0.9.1 ⇒ v0.6.1
  [7d188eb4] + JSONSchema v0.3.4
  [4076af6c] ↓ JuMP v0.22.1 ⇒ v0.21.10
  [b8f27783] ↓ MathOptInterface v0.10.6 ⇒ v0.9.22
  [fdba3010] + MathProgBase v0.7.8
  [739be429] + MbedTLS v1.0.3
  [102ac46a] ↑ MultivariatePolynomials v0.3.2 ⇒ v0.3.18
  [d8a4904e] ↓ MutableArithmetics v0.3.1 ⇒ v0.2.22
  [7f904dfe] ↑ PlutoUI v0.7.1 ⇒ v0.7.23
  [189a3867] ↑ Reexport v0.2.0 ⇒ v1.2.2
  [4c63d2b9] ↑ StatsFuns v0.9.7 ⇒ v0.9.14
  [fd094767] - Suppressor v0.2.0
  [5c2747f8] + URIs v1.3.0
  [ae81ac8f] - ASL_jll v0.1.3+0
  [9cc047cb] - Ipopt_jll v300.1400.400+0
  [d00139f3] - METIS_jll v5.1.1+0
  [d7ed1dd3] - MUMPS_seq_jll v5.4.1+0
  [656ef2d0] - OpenBLAS32_jll v0.3.17+0
Precompiling project...
  14 dependencies successfully precompiled in 129 seconds. 232 already precompiled.

(jl_DG9aAr) pkg> # This updated PlutoUI and StatsFuns but downgraded Ipopt and JuMP

(jl_DG9aAr) pkg> st -m --outdated
Status `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr/Manifest.toml`
  [7c1d4256] DynamicPolynomials v0.3.21 (<v0.4.1): SymbolicUtils
  [b6b21f68] Ipopt v0.6.1 (<v0.9.1)
  [7d188eb4] JSONSchema v0.3.4 (<v1.0.0): MathOptInterface
  [4076af6c] JuMP v0.21.10 (<v0.22.1)
  [b8f27783] MathOptInterface v0.9.22 (<v0.10.6): Ipopt, JuMP
  [0a4f8689] MathTeXEngine v0.2.1 (<v0.3.3): Makie
  [102ac46a] MultivariatePolynomials v0.3.18 (<v0.4.2): DynamicPolynomials, SymbolicUtils
  [d8a4904e] MutableArithmetics v0.2.22 (<v0.3.1): DynamicPolynomials, JuMP, MathOptInterface, MultivariatePolynomials
  [276daf66] SpecialFunctions v1.8.1 (<v2.0.0): JuMP, SymbolicUtils

(jl_DG9aAr) pkg> # looks like Ipopt and JuMP can be updated, so update them!

(jl_DG9aAr) pkg> up -m
    Updating registry at `~/.julia/registries/General.toml`
    Updating `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr/Project.toml`
  [b6b21f68] ↑ Ipopt v0.6.1 ⇒ v0.9.1
  [4076af6c] ↑ JuMP v0.21.10 ⇒ v0.22.1
  [7f904dfe] ↓ PlutoUI v0.7.23 ⇒ v0.7.1
    Updating `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr/Manifest.toml`
  [6e696c72] - AbstractPlutoDingetjes v1.1.2
  [7c1d4256] ↓ DynamicPolynomials v0.3.21 ⇒ v0.3.3
  [cd3eb016] - HTTP v0.9.17
  [47d2ed2b] - Hyperscript v0.0.4
  [ac1192a8] - HypertextLiteral v0.9.3
  [b5f81e59] - IOCapture v0.2.2
  [83e8ac13] - IniFile v0.5.0
  [b6b21f68] ↑ Ipopt v0.6.1 ⇒ v0.9.1
  [7d188eb4] - JSONSchema v0.3.4
  [4076af6c] ↑ JuMP v0.21.10 ⇒ v0.22.1
  [b8f27783] ↑ MathOptInterface v0.9.22 ⇒ v0.10.6
  [fdba3010] - MathProgBase v0.7.8
  [739be429] - MbedTLS v1.0.3
  [102ac46a] ↓ MultivariatePolynomials v0.3.18 ⇒ v0.3.2
  [d8a4904e] ↑ MutableArithmetics v0.2.22 ⇒ v0.3.1
  [7f904dfe] ↓ PlutoUI v0.7.23 ⇒ v0.7.1
  [189a3867] ↓ Reexport v1.2.2 ⇒ v0.2.0
  [4c63d2b9] ↓ StatsFuns v0.9.14 ⇒ v0.9.7
  [fd094767] + Suppressor v0.2.0
  [5c2747f8] - URIs v1.3.0
  [ae81ac8f] + ASL_jll v0.1.3+0
  [9cc047cb] + Ipopt_jll v300.1400.400+0
  [d00139f3] + METIS_jll v5.1.1+0
  [d7ed1dd3] + MUMPS_seq_jll v5.4.1+0
  [656ef2d0] + OpenBLAS32_jll v0.3.17+0

(jl_DG9aAr) pkg> st -m --outdated
Status `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr/Manifest.toml`
  [7c1d4256] DynamicPolynomials v0.3.3 (<v0.4.1): SymbolicUtils
  [0a4f8689] MathTeXEngine v0.2.1 (<v0.3.3): Makie
  [102ac46a] MultivariatePolynomials v0.3.2 (<v0.4.2): DynamicPolynomials, SymbolicUtils
  [7f904dfe] PlutoUI v0.7.1 (<v0.7.23)
  [189a3867] Reexport v0.2.0 (<v1.2.2): DynamicPolynomials
  [276daf66] SpecialFunctions v1.8.1 (<v2.0.0): JuMP, StatsFuns, SymbolicUtils
  [4c63d2b9] StatsFuns v0.9.7 (<v0.9.14)

(jl_DG9aAr) pkg> # hmmm, PlutoUI and StatsFuns can be updated... again, so update them!

(jl_DG9aAr) pkg> up -m
    Updating registry at `~/.julia/registries/General.toml`
    Updating `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr/Project.toml`
  [b6b21f68] ↓ Ipopt v0.9.1 ⇒ v0.6.1
  [4076af6c] ↓ JuMP v0.22.1 ⇒ v0.21.10
  [7f904dfe] ↑ PlutoUI v0.7.1 ⇒ v0.7.23
    Updating `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr/Manifest.toml`
  [6e696c72] + AbstractPlutoDingetjes v1.1.2
  [7c1d4256] ↑ DynamicPolynomials v0.3.3 ⇒ v0.3.21
  [cd3eb016] + HTTP v0.9.17
  [47d2ed2b] + Hyperscript v0.0.4
  [ac1192a8] + HypertextLiteral v0.9.3
  [b5f81e59] + IOCapture v0.2.2
  [83e8ac13] + IniFile v0.5.0
  [b6b21f68] ↓ Ipopt v0.9.1 ⇒ v0.6.1
  [7d188eb4] + JSONSchema v0.3.4
  [4076af6c] ↓ JuMP v0.22.1 ⇒ v0.21.10
  [b8f27783] ↓ MathOptInterface v0.10.6 ⇒ v0.9.22
  [fdba3010] + MathProgBase v0.7.8
  [739be429] + MbedTLS v1.0.3
  [102ac46a] ↑ MultivariatePolynomials v0.3.2 ⇒ v0.3.18
  [d8a4904e] ↓ MutableArithmetics v0.3.1 ⇒ v0.2.22
  [7f904dfe] ↑ PlutoUI v0.7.1 ⇒ v0.7.23
  [189a3867] ↑ Reexport v0.2.0 ⇒ v1.2.2
  [4c63d2b9] ↑ StatsFuns v0.9.7 ⇒ v0.9.14
  [fd094767] - Suppressor v0.2.0
  [5c2747f8] + URIs v1.3.0
  [ae81ac8f] - ASL_jll v0.1.3+0
  [9cc047cb] - Ipopt_jll v300.1400.400+0
  [d00139f3] - METIS_jll v5.1.1+0
  [d7ed1dd3] - MUMPS_seq_jll v5.4.1+0
  [656ef2d0] - OpenBLAS32_jll v0.3.17+0

(jl_DG9aAr) pkg> st -m --outdated
Status `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_DG9aAr/Manifest.toml`
  [7c1d4256] DynamicPolynomials v0.3.21 (<v0.4.1): SymbolicUtils
  [b6b21f68] Ipopt v0.6.1 (<v0.9.1)
  [7d188eb4] JSONSchema v0.3.4 (<v1.0.0): MathOptInterface
  [4076af6c] JuMP v0.21.10 (<v0.22.1)
  [b8f27783] MathOptInterface v0.9.22 (<v0.10.6): Ipopt, JuMP
  [0a4f8689] MathTeXEngine v0.2.1 (<v0.3.3): Makie
  [102ac46a] MultivariatePolynomials v0.3.18 (<v0.4.2): DynamicPolynomials, SymbolicUtils
  [d8a4904e] MutableArithmetics v0.2.22 (<v0.3.1): DynamicPolynomials, JuMP, MathOptInterface, MultivariatePolynomials
  [276daf66] SpecialFunctions v1.8.1 (<v2.0.0): JuMP, SymbolicUtils

(jl_DG9aAr) pkg> # well, Ipopt and JuMP got downgraded again, but it looks like they can be updated too, so update them...

```

And this can go on and on: update PlutoUI and StatsFuns - Ipopt and JuMP get downgraded. Update them - PlutoUI and StatsFuns get downgraded. Rinse and repeat.

I also found a similar loop with _just_ Ipopt and JuMP: [https://github.com/jump-dev/Ipopt.jl/issues/297](https://github.com/jump-dev/Ipopt.jl/issues/297)

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [December 14, 2021, 6:30pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/15 "2021-12-14T18:30:09Z")

</div>

Yes, if you have multiple “pareto optimal” you can get different solutions depending on how you constrain versions. You can specify `[compat]` for packages that you require be at certain version ranges.

---

<div class="post-metadata">

**Author:** ![ForceBru](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/forcebru/32/21389_2.png) [@ForceBru](https://discourse.julialang.org/u/ForceBru)\
**Post date:** [December 14, 2021, 6:46pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/16 "2021-12-14T18:46:28Z")

</div>

> [@kristoffer.carlsson](#):
>
> if you have multiple “pareto optimal” you can get different solutions

TBH, this sounds like a bug to me. Why would there be multiple optima? This then causes “update loops” as shown in my previous comment. One “optimum” has Ipopt v0.9.1, and the other one - Ipopt v0.6.1, which is a big difference, given that [v0.9+ contain breaking changes](https://github.com/jump-dev/Ipopt.jl/blob/66efbc31cb706017eec17bc54a51ec9c44e59791/README.md?plain=1#L1).

This _also_ causes “degenerate paths”, as shown in the “Updating Ipopt and JuMP looks broken” issue I linked: I can do `update --manifest` multiple times, which then _errors out_ at some point because JuMP fails to precompile. Is this not a bug?

In the same issue on GitHub I show that you can run `update -m`, and your packages in `Project.toml` will end up _downgraded_. Is downgrading packages as a result of trying to _update_ them intuitive behavior?

---

<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:** [December 14, 2021, 6:51pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/17 "2021-12-14T18:51:54Z")

</div>

Perhaps we could have a stable heuristic choice of which pareto optimal solution to use. For example, `update A` may update `A` and downgrade `B`, and `update B` might to the reverse, but if `update` heuristically decides to update `A` and downgrade `B`, then running it again should not reverse the behavior.

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [December 14, 2021, 10:05pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/18 "2021-12-14T22:05:26Z")

</div>

> [@ForceBru](#):
>
> TBH, this sounds like a bug to me. Why would there be multiple optima? This then causes “update loops” as shown in my previous comment.

Because you can have one solution `A = 1.0, B = 0.9` and another `A = 0.9, B = 1.0` and there is no way to improve both `A` and `B` in both these situations which is the definition of Pareto optimal.

If you need a certain version of `A` you can always put:

```julia
[compat]
A = "1.0"

```

in the Project file.

> [@ForceBru](#):
>
> I can do `update --manifest` multiple times, which then _errors out_ at some point because JuMP fails to precompile. Is this not a bug?

I don’t understand what this means. The resolver should never give you package versions that are not declared to be compatible with each other.

---

<div class="post-metadata">

**Author:** ![ForceBru](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/forcebru/32/21389_2.png) [@ForceBru](https://discourse.julialang.org/u/ForceBru)\
**Post date:** [December 15, 2021, 1:12pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/19 "2021-12-15T13:12:24Z")

</div>

> [@kristoffer.carlsson](#):
>
> The resolver should never give you package versions that are not declared to be compatible with each other.

Exactly, so this must be a bug in some package’s `[compat]` section, then… Anyway, one can run the following commands in the Pkg REPL to reproduce this:

```julia
pkg> activate --temp
  Activating new project at `/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_nzhtpt`

(jl_nzhtpt) pkg> add JuMP Ipopt; up -m; up -m; up -m; up -m; precompile
    Updating registry at `~/.julia/registries/General.toml`
   Resolving package versions...
    Updating `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_nzhtpt/Project.toml`
  [b6b21f68] + Ipopt v0.9.1
  [4076af6c] + JuMP v0.22.1
    Updating `/private/var/folders/ys/3h0gnqns4b98zb66_vl_m35m0000gn/T/jl_nzhtpt/Manifest.toml`
...

```

Basically, do `update --manifest` multiple times until there’s an error.

This goes on for a while ([full output](https://pastebin.com/XpQJXgVy)), and then precompilation fails:

```julia
...
Precompiling project...
  ✗ JuMP
  0 dependencies successfully precompiled in 5 seconds (46 already precompiled)

ERROR: The following 1 direct dependency failed to precompile:

JuMP [4076af6c-e467-56ae-b986-b466b2749572]

Failed to precompile JuMP [4076af6c-e467-56ae-b986-b466b2749572] to ~/.julia/compiled/v1.7/JuMP/jl_934ICp.
ERROR: LoadError: UndefVarError: Grisu not defined
Stacktrace:
  [1] getproperty(x::Module, f::Symbol)
    @ Base ./Base.jl:35
  [2] top-level scope
    @ ~/.julia/packages/JuMP/I7whV/src/writers.jl:6
  [3] include(mod::Module, _path::String)
    @ Base ./Base.jl:418
  [4] include(x::String)
    @ JuMP ~/.julia/packages/JuMP/I7whV/src/JuMP.jl:11
  [5] top-level scope
    @ ~/.julia/packages/JuMP/I7whV/src/JuMP.jl:947
  [6] include
    @ ./Base.jl:418 [inlined]
  [7] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt64}}, source::Nothing)
    @ Base ./loading.jl:1318
  [8] top-level scope
    @ none:1
  [9] eval
    @ ./boot.jl:373 [inlined]
 [10] eval(x::Expr)
    @ Base.MainInclude ./client.jl:453
 [11] top-level scope
    @ none:1
in expression starting at ~/.julia/packages/JuMP/I7whV/src/writers.jl:5
in expression starting at ~/.julia/packages/JuMP/I7whV/src/JuMP.jl:11

(jl_nzhtpt) pkg>

```

IMO, I should be able to run any `update` command multiple times, and that should always have the same result, unless there’s an actual update available. But as I read here and in other posts, this may not be always possible because of multiple (unstable!) equilibria.

For example, I can run `conda update --all` as many times as I want, but it will update everything only once and just say `All requested packages already installed` on all subsequent runs, unless there’s a new update that’s compatible with my environment. `Pkg.jl`, on the contrary, can (not necessarily _will_) jump between different package… collections or configurations, which looks really confusing.

* * *

For anyone who stumbles upon this post in the future, it looks like it may not be possible to “update them all”, because different versions of packages may have different requirements, so updating one package may (perhaps surprisingly) downgrade other packages in order to satisfy these requirements. This is also discussed here in the context of the Anaconda package manager: [python - anaconda update all possible packages? - Stack Overflow](https://stackoverflow.com/questions/38972052/anaconda-update-all-possible-packages).

---

<div class="post-metadata">

**Author:** ![albheim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/albheim/32/34660_2.png) [@albheim](https://discourse.julialang.org/u/albheim)\
**Post date:** [December 15, 2021, 2:49pm UTC](https://discourse.julialang.org/t/how-to-force-an-update/73071/20 "2021-12-15T14:49:42Z")

</div>

I could replicate this, seems like buggy behavior.

But is `update --manifest` really what you want to do? If you install `JuMP` and `Ipopt` you would want those two packages to be updated, and their dependencies could be whatever is required? I would always use just `update` instead. I have never seen update behave like this, though I assume they use some similar algorithm in the background so maybe it is possible if you have the correct combination of packages. Tried to add some of the packages that changed a lot to the environment to see if `update` would start acting up also but didn’t get any weird behavior.

[Next page](https://discourse.julialang.org/t/how-to-force-an-update/73071.md?page=2)
