Artifacts, package updating, and system libraries (Julia 1.5.2)

When I do ] up, I see a lot of artifacts corresponding to downloads of libraries that already exist on my FreeBSD 12 system. Thus it seems that the package system is becoming more and more heavy-weight. Being a user, I understand a user’s desire for simplicity (“I don’t want to know the details, just do it”). But there must be a golden mean between simplicity and bloat.

Pending finding this golden mean, I’d like to understand from the following transcript what package is causing Qt5 libraries (which exist on my system) to be downloaded. I’ve read the documentation on artifacts, but can’t see how to do it.

Here is the transcript:

(@v1.5) pkg> up
   Updating registry at `~/.julia/registries/General`
   Updating git-repo ``
  Installed Xorg_xcb_util_wm_jll ───────── v0.4.1+1
  Installed ArrayInterface ─────────────── v2.14.3
  Installed SpecialFunctions ───────────── v1.1.0
  Installed PlotlyBase ─────────────────── v0.4.3
  Installed Ipopt ──────────────────────── v0.6.5
  Installed SymPy ──────────────────────── v1.0.36
  Installed JuliaInterpreter ───────────── v0.8.5
  Installed Qt_jll ─────────────────────── v5.15.2+0
  Installed Xorg_xcb_util_image_jll ────── v0.4.0+1
  Installed PlotUtils ──────────────────── v1.0.8
  Installed Xorg_xcb_util_jll ──────────── v0.4.0+1
  Installed DiffResults ────────────────── v1.0.3
  Installed GeometryBasics ─────────────── v0.3.4
  Installed Contour ────────────────────── v0.5.7
  Installed Parsers ────────────────────── v1.0.14
  Installed Pixman_jll ─────────────────── v0.40.0+0
  Installed Xorg_xcb_util_keysyms_jll ──── v0.4.0+1
  Installed Xorg_xcb_util_renderutil_jll ─ v0.3.9+1
  Installed Formatting ─────────────────── v0.4.2
  Installed ForwardDiff ────────────────── v0.10.14
  Installed MathOptInterface ───────────── v0.9.19
  Installed Latexify ───────────────────── v0.14.6
  Installed FiniteDiff ─────────────────── v2.7.2
  Installed GR_jll ─────────────────────── v0.53.0+0
Downloading artifact: Xorg_xcb_util_wm
Downloading artifact: Qt
Downloading artifact: Xorg_xcb_util_image
Downloading artifact: Xorg_xcb_util
Downloading artifact: Pixman
Downloading artifact: Xorg_xcb_util_keysyms
Downloading artifact: Xorg_xcb_util_renderutil
Updating `~/.julia/environments/v1.5/Project.toml`
  [b6b21f68] ↑ Ipopt v0.6.4 ⇒ v0.6.5
  [a03496cd] ↑ PlotlyBase v0.4.2 ⇒ v0.4.3
  [276daf66] ↑ SpecialFunctions v0.10.3 ⇒ v1.1.0
  [24249f21] ↑ SymPy v1.0.32 ⇒ v1.0.36
Updating `~/.julia/environments/v1.5/Manifest.toml`
  [4fba245c] ↑ ArrayInterface v2.13.7 ⇒ v2.14.3
  [d38c429a] ↑ Contour v0.5.6 ⇒ v0.5.7
  [163ba53b] ↑ DiffResults v1.0.2 ⇒ v1.0.3
  [6a86dc24] ↑ FiniteDiff v2.7.1 ⇒ v2.7.2
  [59287772] ↑ Formatting v0.4.1 ⇒ v0.4.2
  [f6369f11] ↑ ForwardDiff v0.10.12 ⇒ v0.10.14
  [d2c73de3] ↑ GR_jll v0.52.0+0 ⇒ v0.53.0+0
  [5c1252a2] ↑ GeometryBasics v0.3.3 ⇒ v0.3.4
  [b6b21f68] ↑ Ipopt v0.6.4 ⇒ v0.6.5
  [aa1ae85d] ↑ JuliaInterpreter v0.8.4 ⇒ v0.8.5
  [23fbe1c1] ↑ Latexify v0.14.5 ⇒ v0.14.6
  [b8f27783] ↑ MathOptInterface v0.9.18 ⇒ v0.9.19
  [69de0a69] ↑ Parsers v1.0.12 ⇒ v1.0.14
  [30392449] ↑ Pixman_jll v0.38.4+5 ⇒ v0.40.0+0
  [995b91a9] ↑ PlotUtils v1.0.7 ⇒ v1.0.8
  [a03496cd] ↑ PlotlyBase v0.4.2 ⇒ v0.4.3
  [784f63db] - Qhull_jll v2019.1.0+2
  [ede63266] ↑ Qt_jll v5.15.1+0 ⇒ v5.15.2+0
  [276daf66] ↑ SpecialFunctions v0.10.3 ⇒ v1.1.0
  [24249f21] ↑ SymPy v1.0.32 ⇒ v1.0.36
  [12413925] ↑ Xorg_xcb_util_image_jll v0.4.0+0 ⇒ v0.4.0+1
  [2def613f] ↑ Xorg_xcb_util_jll v0.4.0+0 ⇒ v0.4.0+1
  [975044d2] ↑ Xorg_xcb_util_keysyms_jll v0.4.0+0 ⇒ v0.4.0+1
  [0d47668e] ↑ Xorg_xcb_util_renderutil_jll v0.3.9+0 ⇒ v0.3.9+1
  [c22f9ab0] ↑ Xorg_xcb_util_wm_jll v0.4.1+0 ⇒ v0.4.1+1
   Building Ipopt → `~/.julia/packages/Ipopt/P1XLY/deps/build.log`

(@v1.5) pkg> 

Thanks for your help.

1 Like

You cannot really say that “you have a library on your system”. You have a certain version of a library, compiled with a certain set of compiler flags, with a certain set of RPATHs etc. By default, the package manager will install versions of packages built in such a way that they are compatible with the rest of the libraries. You can override this by pointing these libraries to local ones

For some more info about artifacts, see:

and the JuliaCon talk


Yes, I understand about versions, flags, etc., and that some binaries need specific library versions. That is what I meant by “simplicity vs. bloat”. Both the user and the developer want to simplify their lives, but this may cause bloat.

Thanks for the doc link you provided, somehow it had escaped me.

But I still don’t see how to find what package update caused the download of Qt (for example).

Generally, the artifact Qt is provided by the package Qt_jll. You can look in your Manifest file to see what packages depend on Qt_jll. I have a WIP PR to make it a bit easier from the Pkg REPL:


Ok, I found it. Updating GR is the root cause. I have my own GR in /opt/gr,
but I forgot to set GRDIR appropriately in my startup.jl. Then ] add GR
causes Qt to be downloaded, which in turn causes a cascade of X libraries to be also downloaded.

Anyhow, now after I do ] rm GR, .julia/packages/QT-jll and the other jll’s corresponding to the “spurious” X libraries are still there.
Is this as expected? Or should I be doing something else to get rid of Qt_jll etc?

You can run pkg> gc --all to have Pkg clean up all packages and artifacts not in use by one of your projects.