How to force an update?

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

(???) 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. Is it possible to disregard all compatibility constraints and update everything anyway?

1 Like

What happens if you do add StatsFuns@0.9.14?

1 Like

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…

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

(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?

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

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

1 Like

CompatHelper: bump compat for DynamicPolynomials to 0.4, (keep existing compat) by github-actions[bot] · Pull Request #395 · JuliaSymbolics/SymbolicUtils.jl · GitHub needs to be put into a release so that DynamicPolynomials 0.4 is allowed for SymbolicUtils. You can see it from

(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
3 Likes

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 Optionally warn if `update` cannot install latest version of a package · Issue #1655 · JuliaLang/Pkg.jl · GitHub


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

Just come over to the bleeding edge:

               _
   _       _ _(_)_     |  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)

3 Likes

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

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

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)

1 Like

Yes, to the best of its abilities:

(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:

(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)

What’s up with StatsFuns, though? For example, according to the documentation, 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:

(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:

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: Updating Ipopt and JuMP looks broken · Issue #297 · jump-dev/Ipopt.jl · GitHub

1 Like

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.

2 Likes

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.

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?

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.

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:

[compat]
A = "1.0"

in the Project file.

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.

2 Likes

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:

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), and then precompilation fails:

...
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.

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.