代码之家  ›  专栏  ›  技术社区  ›  David Scholz

未能预编译StatsPlots.jl

  •  0
  • David Scholz  · 技术社区  · 3 年前

    这可能连接到 this this 。然而,建议的解决方案都不适合我。

    我正在使用带有Julia扩展的VSCode,我在Jupyter笔记本上运行所有内容。我的第一个单元格如下。

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

    执行单元格会产生以下错误。

    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
    

    接下来,我打开了Julia命令行,并使用 ] rm "StatsPlots" 并使用 ] add "StatsPlots" 没有成功。我试着执行 precompile 在命令行中手动操作,生成以下输出。

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

    我尝试重新启动Julia内核,重新启动VSCode,并尝试了我提供的第二个链接中建议的解决方案,即删除包并运行 gc

    我也删除并重新阅读 MultivariateStats Arpack 但是上述误差仍然存在。

    这可能是出于兴趣,它以前也起过作用。我首先在执行以下单元格时遇到了另一个错误。

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

    以上操作导致以下错误消息。

    LoadError: UndefVarError: @df not defined
    

    可能是我不小心添加了过时的扩展 StatPlots 这可能导致了上述问题。但是,我已经删除了旧的扩展并添加了新的扩展。

    如何解决上述问题?

    编辑: 跑步 Pkg.status() 产生以下输出。

    (@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
    
    0 回复  |  直到 3 年前
        1
  •  5
  •   David Scholz    3 年前

    我解决了这个问题。问题的根源是缺少库 libopenblas64 。这可能是由于Julia安装有故障。以下是我所做的。

    首先,打开Julia命令行并执行以下两个命令。

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

    在我的案例中,这产生了以下输出。

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

    我在中发现了类似的问题 this Github问题。这里也给出了正确的提示。由于我使用的是Manjaro(构建在Arch Linux操作系统上),所以我使用的Julia安装包可能有问题。

    我删除了Julia的安装并安装了官方二进制文件: julia-bin 通过执行以下命令。

    yay -S julia-bin
    

    再次打开Julia命令行,然后运行前两个命令。这一次的输出如下。

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

    执行我的笔记本现在按预期工作。

    推荐文章