我可以制作一个包含多个可以独立导入的模块的Julia包吗?

har*_*s12 14 packages package julia

一个我合作的项目有四个不同的模块(Foo,Bar,BazPlotting),我一直在负责将它们组合成一个包.在Julia中制作新包装非常简单:

julia> Pkg.generate("MyPackage", "MIT")
Run Code Online (Sandbox Code Playgroud)

我将我的模块复制到~/.julia/v0.3/MyPackage/src/并添加了include语句MyPackage.jl.它看起来像这样:

module MyPackage

include("foo.jl")
include("bar.jl")
include("baz.jl")
include("plotting.jl")

end
Run Code Online (Sandbox Code Playgroud)

每个包含的文件都包含相应的模块.

我的主要问题是Plotting需要永久导入,当我们使用其余部分时,它并不经常需要MyPackage.我真的希望能够做这样的事情using MyPackage.Foo只得到Foo(特别是排除Plotting其缓慢导入时间).我已经尝试了几种不同的方法来构建事物,包括在内部明确定义子模块MyPackage.jl而不是单独定义每个文件,但无论我尝试什么,我总是得到加载延迟Plotting.

是否可以构建一个包,以便您可以从中独立加载模块?如果是的话,怎么样?

注意:我是朱莉娅的新手,还是新手还在构建包.很抱歉,如果我的任何语义错误或任何不清楚的地方.

Isa*_*ton 5

尝试Requires.jl

Requires is a Julia package that will magically make loading packages faster, maybe. It supports specifying glue code in packages which will load automatically when a another package is loaded, so that explicit dependencies (and long load times) can be avoided.

  • 似乎在最近版本的 `Requires.jl` 中,`@lazymod` 功能已被删除...... (3认同)
  • 对于任何对更多细节感兴趣的人,`@lazymod` 是 `Requires.jl` 中的一个宏,它延迟模块的导入,直到它被实际使用,然而,它也改变了调用模块的语法。虽然感觉它不是最优雅的解决方案,但它确实有助于加快我的导入速度,直到我真正需要绘图为止。谢谢! (2认同)