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

时间:2015-06-11 14:08:09

标签: package packages julia

我合作的其中一个项目有四个不同的模块(FooBarBazPlotting)和我我们的任务是将它们组合成一个包。在Julia中创建一个新的包很简单:

julia> Pkg.generate("MyPackage", "MIT")

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

module MyPackage

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

end

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

我的主要问题是Plotting需要永久才能导入,当我们使用其余的MyPackage时,我们不需要经常使用 。我真的希望能够执行using MyPackage.Foo之类的操作来获取Foo(特别是排除Plotting及其导入时间慢)。我已经尝试了几种不同的方法来构建事物,包括在MyPackage.jl内明确定义子模块,而不是单独在每个文件中定义,但无论我尝试什么,我总是得到加载延迟Plotting

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

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

2 个答案:

答案 0 :(得分:3)

尝试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.

答案 1 :(得分:0)

  

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

根据此评论的建议对我有用: https://discourse.julialang.org/t/multiple-modules-in-single-package/5615/7?u=nhdaly

您可以将顶级的包命名模块更改为仅公开其他四个模块,如下所示:

# <julia_home>/MyPackage/src/MyPackage.jl
module MyPackage
push!(LOAD_PATH, @__DIR__) # expose all other modules defined in this directory.
end

然后要导入其他模块,例如Bar,用户代码将执行:

# code.jl
using MyPackage; using Foo;
...

但值得注意的是,FooBarBazPlotting都被视为顶级模块,因此您和#39;我想让他们的名字独一无二,这样他们就不会与其他软件包/模块发生冲突。 (例如MyPackageFoo之类的约会,而不是Foo。)