无法预编译 StatsPlots.jl

Dav*_*olz 3 julia julia-plots

这可能与thisthis相关。但是,建议的解决方案都不适合我。

\n

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

\n
using Distributions\nusing StatsBase\nusing CSV\nusing DataFrames\nusing HypothesisTests\nusing Plots\nusing GLM\nusing StatsPlots\n
Run Code Online (Sandbox Code Playgroud)\n

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

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

接下来,我打开 Julia 命令行并使用 删除了 StatsPlots 扩展,] rm "StatsPlots"然后使用 读取了它,] add "StatsPlots"但没有成功。我尝试precompile在命令行中手动执行,这会产生以下输出。

\n
(@v1.7) pkg> precompile\nPrecompiling project...\n  \xe2\x9c\x97 Arpack\n  \xe2\x9c\x97 MultivariateStats\n  \xe2\x9c\x97 StatsPlots\n  0 dependencies successfully precompiled in 11 seconds (216 already precompiled)\n\nERROR: The following 1 direct dependency failed to precompile:\n\nStatsPlots [f3b207a7-027a-5e70-b257-86293d7955fd]\n\nFailed to precompile StatsPlots [f3b207a7-027a-5e70-b257-86293d7955fd] to /home/david/.julia/compiled/v1.7/StatsPlots/jl_1XjxNk.\nERROR: LoadError: InitError: could not load library "/home/david/.julia/artifacts/cdf6dc8aa6771a61c6c65a5a5c1a8d1b75f50a2f/lib/libarpack.so"\nlibopenblas64_.so: cannot open shared object file: No such file or directory\nStacktrace:\n [1] macro expansion\n   @ ~/.julia/packages/JLLWrappers/QpMQW/src/products/library_generators.jl:54 [inlined]\n [2] __init__()\n   @ Arpack_jll ~/.julia/packages/Arpack_jll/zfgpQ/src/wrappers/x86_64-linux-gnu-libgfortran5.jl:10\n [3] top-level scope (repeats 2 times)\n   @ none:1\nduring initialization of module Arpack_jll\nin expression starting at /home/david/.julia/packages/Arpack/pLziT/src/Arpack.jl:2\nERROR: LoadError: Failed to precompile Arpack [7d9fca2a-8960-54d3-9f78-7d1dccf2cb97] to /home/david/.julia/compiled/v1.7/Arpack/jl_fCy8AR.\nStacktrace:\n [1] include(x::String)\n   @ MultivariateStats ~/.julia/packages/MultivariateStats/zLpz8/src/MultivariateStats.jl:1\n [2] top-level scope\n   @ ~/.julia/packages/MultivariateStats/zLpz8/src/MultivariateStats.jl:113\n [3] top-level scope (repeats 2 times)\n   @ none:1\nin expression starting at /home/david/.julia/packages/MultivariateStats/zLpz8/src/kpca.jl:3\nin expression starting at /home/david/.julia/packages/MultivariateStats/zLpz8/src/MultivariateStats.jl:1\nERROR: LoadError: Failed to precompile MultivariateStats [6f286f6a-111f-5878-ab1e-185364afe411] to /home/david/.julia/compiled/v1.7/MultivariateStats/jl_8Rrih5.\nStacktrace:\n [1] top-level scope (repeats 2 times)\n   @ none:1\nin expression starting at /home/david/.julia/packages/StatsPlots/CpWiU/src/StatsPlots.jl:1\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试重新启动 Julia 内核,重新启动 VSCode,并且尝试了我提供的第二个链接中建议的解决方案,这意味着删除软件包并运行gc.

\n

我也删除并阅读了MultivariateStatsArpack但上述错误仍然存​​在。

\n

可能是出于兴趣,它以前曾经有效过。我首先通过执行以下单元格遇到不同的错误。

\n
@df data density(:Age, group = :Treatment, title = "Distribution of ages by treatment group", xlab = "Age", ylab="Distribution", legend=:topright)\n
Run Code Online (Sandbox Code Playgroud)\n

上面产生了以下错误消息。

\n
LoadError: UndefVarError: @df not defined\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

我该如何解决上述问题?

\n

编辑:运行Pkg.status()会产生以下输出。

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

Dav*_*olz 5

我能够解决这个问题。问题的根源是缺少库libopenblas64。这可能是由于 Julia 安装错误造成的。这是我所做的。

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

using Libdl
filter!(p -> occursin("blas", p), Libdl.dllist())
Run Code Online (Sandbox Code Playgroud)

就我而言,这产生了以下输出。

1-element Array{String,1}:
 "/usr/bin/../lib/libblas.so"
Run Code Online (Sandbox Code Playgroud)

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

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

yay -S julia-bin
Run Code Online (Sandbox Code Playgroud)

再次打开 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"
Run Code Online (Sandbox Code Playgroud)

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