Search code examples
juliajulia-plots

Failed to precompile StatsPlots.jl


This might be connected to this or this. However, none of the suggested solutions works for me.

I'm using VSCode with the Julia extension and I run everything in a Jupyter notebook. My first cell looks as follows.

using Distributions
using StatsBase
using CSV
using DataFrames
using HypothesisTests
using Plots
using GLM
using StatsPlots

Executing the cell yields to the following error.

ailed to precompile StatsPlots [f3b207a7-027a-5e70-b257-86293d7955fd] to /home/david/.julia/compiled/v1.7/StatsPlots/jl_27z7QU.

Stacktrace:
  [1] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, ignore_loaded_modules::Bool)
    @ Base ./loading.jl:1466
  [2] compilecache(pkg::Base.PkgId, path::String)
    @ Base ./loading.jl:1410
  [3] _require(pkg::Base.PkgId)
    @ Base ./loading.jl:1120
  [4] require(uuidkey::Base.PkgId)
    @ Base ./loading.jl:1013
  [5] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:997
  [6] eval
    @ ./boot.jl:373 [inlined]
  [7] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1196
  [8] #invokelatest#2
    @ ./essentials.jl:716 [inlined]
  [9] invokelatest
    @ ./essentials.jl:714 [inlined]
 [10] (::VSCodeServer.var"#150#151"{VSCodeServer.NotebookRunCellArguments, String})()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.5.11/scripts/packages/VSCodeServer/src/serve_notebook.jl:18
 [11] withpath(f::VSCodeServer.var"#150#151"{VSCodeServer.NotebookRunCellArguments, String}, path::String)
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.5.11/scripts/packages/VSCodeServer/src/repl.jl:185
 [12] notebook_runcell_request(conn::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, params::VSCodeServer.NotebookRunCellArguments)
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.5.11/scripts/packages/VSCodeServer/src/serve_notebook.jl:14
 [13] dispatch_msg(x::VSCodeServer.JSONRPC.JSONRPCEndpoint{Base.PipeEndpoint, Base.PipeEndpoint}, dispatcher::VSCodeServer.JSONRPC.MsgDispatcher, msg::Dict{String, Any})
    @ VSCodeServer.JSONRPC ~/.vscode/extensions/julialang.language-julia-1.5.11/scripts/packages/JSONRPC/src/typed.jl:67
 [14] serve_notebook(pipename::String; crashreporting_pipename::String)
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.5.11/scripts/packages/VSCodeServer/src/serve_notebook.jl:94
 [15] top-level scope
    @ ~/.vscode/extensions/julialang.language-julia-1.5.11/scripts/notebook/notebook.jl:12

Next, I have opened the Julia command line and removed the StatsPlots extensions using ] rm "StatsPlots" and readded it using ] add "StatsPlots" with no success. I have tried to execute precompile in the command line by hand which yields to the following output.

(@v1.7) pkg> precompile
Precompiling project...
  ✗ Arpack
  ✗ MultivariateStats
  ✗ StatsPlots
  0 dependencies successfully precompiled in 11 seconds (216 already precompiled)

ERROR: The following 1 direct dependency failed to precompile:

StatsPlots [f3b207a7-027a-5e70-b257-86293d7955fd]

Failed to precompile StatsPlots [f3b207a7-027a-5e70-b257-86293d7955fd] to /home/david/.julia/compiled/v1.7/StatsPlots/jl_1XjxNk.
ERROR: LoadError: InitError: could not load library "/home/david/.julia/artifacts/cdf6dc8aa6771a61c6c65a5a5c1a8d1b75f50a2f/lib/libarpack.so"
libopenblas64_.so: cannot open shared object file: No such file or directory
Stacktrace:
 [1] macro expansion
   @ ~/.julia/packages/JLLWrappers/QpMQW/src/products/library_generators.jl:54 [inlined]
 [2] __init__()
   @ Arpack_jll ~/.julia/packages/Arpack_jll/zfgpQ/src/wrappers/x86_64-linux-gnu-libgfortran5.jl:10
 [3] top-level scope (repeats 2 times)
   @ none:1
during initialization of module Arpack_jll
in expression starting at /home/david/.julia/packages/Arpack/pLziT/src/Arpack.jl:2
ERROR: LoadError: Failed to precompile Arpack [7d9fca2a-8960-54d3-9f78-7d1dccf2cb97] to /home/david/.julia/compiled/v1.7/Arpack/jl_fCy8AR.
Stacktrace:
 [1] include(x::String)
   @ MultivariateStats ~/.julia/packages/MultivariateStats/zLpz8/src/MultivariateStats.jl:1
 [2] top-level scope
   @ ~/.julia/packages/MultivariateStats/zLpz8/src/MultivariateStats.jl:113
 [3] top-level scope (repeats 2 times)
   @ none:1
in expression starting at /home/david/.julia/packages/MultivariateStats/zLpz8/src/kpca.jl:3
in expression starting at /home/david/.julia/packages/MultivariateStats/zLpz8/src/MultivariateStats.jl:1
ERROR: LoadError: Failed to precompile MultivariateStats [6f286f6a-111f-5878-ab1e-185364afe411] to /home/david/.julia/compiled/v1.7/MultivariateStats/jl_8Rrih5.
Stacktrace:
 [1] top-level scope (repeats 2 times)
   @ none:1
in expression starting at /home/david/.julia/packages/StatsPlots/CpWiU/src/StatsPlots.jl:1

I have tried to restart the Julia kernel, restart VSCode, and I've tried the solution suggested in the second link that I have provided, meaning removing the package and run gc.

I have also removed and readded MultivariateStats and Arpack but the above error remains.

It might be from interest that it has worked before. I run into a different error first by executing the following cell.

@df data density(:Age, group = :Treatment, title = "Distribution of ages by treatment group", xlab = "Age", ylab="Distribution", legend=:topright)

The above yielded to the following error message.

LoadError: UndefVarError: @df not defined

It might have been the case that I accidently added the outdated extension StatPlots and that might have caused the above issue. However, I've removed the old extension and added the new one.

How can I resolve the above problem?

Edit: Running Pkg.status() yields to the following output.

(@v1.7) pkg> status
      Status `~/.julia/environments/v1.7/Project.toml`
  [336ed68f] CSV v0.10.2
  [8f4d0f93] Conda v1.6.0
  [a93c6f00] DataFrames v1.3.2
  [31c24e10] Distributions v0.25.48
  [38e38edf] GLM v1.6.1
  [a2cc645c] GraphPlot v0.5.0
  [86223c79] Graphs v1.6.0
  [09f84164] HypothesisTests v0.10.6
  [7073ff75] IJulia v1.23.2
  [91a5bcdd] Plots v1.25.8
  [c3e4b0f8] Pluto v0.18.0
  [7f904dfe] PlutoUI v0.7.23
  [438e738f] PyCall v1.93.0
  [d330b81b] PyPlot v2.10.0
  [aa4a32ff] SimpleHypergraphs v0.2.0
  [2913bbd2] StatsBase v0.33.14
  [f3b207a7] StatsPlots v0.14.33

Solution

  • I was able to resolve the problem. The root of the problem was the missing library libopenblas64. This could be due to a faulty Julia installation. Here is what I have done.

    First, open the Julia command line and execute the following two commands.

    using Libdl
    filter!(p -> occursin("blas", p), Libdl.dllist())
    

    In my case, this yielded to the following output.

    1-element Array{String,1}:
     "/usr/bin/../lib/libblas.so"
    

    I have found a similar issue in this Github issue. The correct hint is given there as well. Since I am using Manjaro (built on the Arch Linux operating system), there might have been a problem with the Julia installation package that I used.

    I removed my Julia installation and installed the official binaries: julia-bin by executing the following command.

    yay -S julia-bin
    

    Open the Julia command line again and run the first two commands. This time the output is as follows.

    julia> filter!(p -> occursin("blas", p), Libdl.dllist())
    2-element Vector{String}:
     "/usr/bin/../lib/julia/libopenblas64_.so"
     "/usr/bin/../lib/julia/libblastrampoline.so"
    

    Executing my notebook works as expected now.