Julia - 如果我激活一个新环境,为什么我仍然可以从我的一般环境中加载模块?

Osk*_*ar 6 environment package julia

我想知道 Julia 中的环境是如何工作的。我认为通过创建一个新环境,您应该只能看到该环境中的包,但事实并非如此。为什么呢?

即,如果我创建一个临时目录并以该目录作为环境启动 Julia,我仍然可以加载在我的一般环境中但不在标准库中的模块。

$ mkdir /tmp/jl_temp
$ julia --project=/tmp/jl_temp 
Run Code Online (Sandbox Code Playgroud)
(jl_temp) pkg> st
Status `/tmp/jl_temp/Project.toml` (empty project)

julia> using Plots

julia> plot()
Run Code Online (Sandbox Code Playgroud)

这在不给我任何包未安装错误的情况下工作。有人可以向我解释这种行为的原因吗?对我来说,除了标准库和Project.toml环境文件中的包之外,它应该无法加载任何包。我在Pkg.jl文档中找不到任何答案。

Bog*_*ski 6

这取决于您如何设置LOAD_PATH变量。见这里

默认LOAD_PATH设置为:

julia> LOAD_PATH
3-element Array{String,1}:
 "@"
 "@v#.#"
 "@stdlib"
Run Code Online (Sandbox Code Playgroud)

通过以下方式检查完整的搜索路径:

(@v1.5) pkg> activate .
 Activating new environment at `~/Project.toml`

julia> Base.load_path()
3-element Array{String,1}:
 "/home/bkamins/Project.toml"
 "/home/bkamins/.julia/environments/v1.5/Project.toml"
 "/home/bkamins/julia/share/julia/stdlib/v1.5"
Run Code Online (Sandbox Code Playgroud)

(我已在当前​​工作目录中激活项目)

所以你可以看到,如果在你的项目中找不到某个包,Julia 会回退到LOAD_PATH. 如果您想避免它LOAD_PATH,请根据需要进行修改。