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

**URL:** <https://discourse.julialang.org/t/artifacts-package-updating-and-system-libraries-julia-1-5-2/51468>\
**Category:** General Usage\
**Created:** [December 8, 2020, 3:45pm UTC](https://discourse.julialang.org/t/artifacts-package-updating-and-system-libraries-julia-1-5-2/51468 "2020-12-08T15:45:12Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![ko56](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ko56/32/2684_2.png) [@ko56](https://discourse.julialang.org/u/ko56)\
**Post date:** [December 8, 2020, 3:45pm UTC](https://discourse.julialang.org/t/artifacts-package-updating-and-system-libraries-julia-1-5-2/51468/1 "2020-12-08T15:45:12Z")

</div>

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:

```julia
(@v1.5) pkg> up
   Updating registry at `~/.julia/registries/General`
   Updating git-repo `https://github.com/JuliaRegistries/General.git`
  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.

---

<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 8, 2020, 3:50pm UTC](https://discourse.julialang.org/t/artifacts-package-updating-and-system-libraries-julia-1-5-2/51468/2 "2020-12-08T15:50:19Z")

</div>

> [@ko56](#):
>
> When I do ] up, I see a lot of artifacts corresponding to downloads of libraries that already exist on my FreeBSD 12 system.

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 `RPATH`s 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 [8. Artifacts · Pkg.jl](https://julialang.github.io/Pkg.jl/v1/artifacts/#Overriding-artifact-locations).

For some more info about artifacts, see:

> **[Pkg + BinaryBuilder -- The Next Generation](https://julialang.org/blog/2019/11/artifacts/)**
>
> Over the past few months, we have been iterating on and refining a design for \`Pkg\` in Julia 1.3+ to reason about binary objects that are not Julia packages. While the motivating application for this work has been improving the installation...

and the JuliaCon talk

[![](https://global.discourse-cdn.com/julialang/original/3X/b/e/be1c475699eea77291ff81f64288eb1e1181ed72.jpeg "JuliaCon 2020 | What's new in Pkg: artifacts, binaries & the Pkg protocol | Stefan K & Elliot S") ](https://www.youtube.com/watch?v=xPhnJCAkI4k)

---

<div class="post-metadata">

**Author:** ![ko56](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ko56/32/2684_2.png) [@ko56](https://discourse.julialang.org/u/ko56)\
**Post date:** [December 8, 2020, 4:22pm UTC](https://discourse.julialang.org/t/artifacts-package-updating-and-system-libraries-julia-1-5-2/51468/3 "2020-12-08T16:22:27Z")

</div>

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

---

<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 8, 2020, 4:29pm UTC](https://discourse.julialang.org/t/artifacts-package-updating-and-system-libraries-julia-1-5-2/51468/4 "2020-12-08T16:29:04Z")

</div>

> [@ko56](#):
>
> 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: [implement why, showing why a package is in the manifest by KristofferC · Pull Request #1810 · JuliaLang/Pkg.jl · GitHub](https://github.com/JuliaLang/Pkg.jl/pull/1810)

---

<div class="post-metadata">

**Author:** ![ko56](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ko56/32/2684_2.png) [@ko56](https://discourse.julialang.org/u/ko56)\
**Post date:** [December 8, 2020, 6:18pm UTC](https://discourse.julialang.org/t/artifacts-package-updating-and-system-libraries-julia-1-5-2/51468/5 "2020-12-08T18:18:06Z")

</div>

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?

---

<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 8, 2020, 6:32pm UTC](https://discourse.julialang.org/t/artifacts-package-updating-and-system-libraries-julia-1-5-2/51468/6 "2020-12-08T18:32:54Z")

</div>

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