【问题标题】:Julia - If I activate a new environment, why can I still load modules from my general environment?Julia - 如果我激活一个新环境,为什么我仍然可以从我的一般环境中加载模块?
【发布时间】:2021-01-23 11:54:39
【问题描述】:

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

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

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

julia> using Plots

julia> plot()

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

【问题讨论】:

  • 你确定这是一个“环境”?它看起来像是目录路径的问题,与软件中的“环境”通常意味着什么相反,即当前可以由函数或命令直接访问的所有对象或参数。
  • 看看Pkg.jl 的文档,他们是如何描述环境的,尤其是这个新环境与我们之前使用的环境完全不同。完成的是]activate .]add Example

标签: package julia environment


【解决方案1】:

这是由您设置LOAD_PATH 变量的方式管理的。见here

默认情况下LOAD_PATH 设置为:

julia> LOAD_PATH
3-element Array{String,1}:
 "@"
 "@v#.#"
 "@stdlib"

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2020-08-02
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多