我合作的其中一个项目有四个不同的模块(Foo
,Bar
,Baz
和Plotting
)和我我们的任务是将它们组合成一个包。在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
。
是否可以构建一个包,以便您可以从中独立加载模块?如果是的话,怎么样?
注意:我是朱莉娅的新手,还是新手还在构建包。很抱歉,如果我的任何语义错误或任何不清楚的地方。
答案 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;
...
但值得注意的是,Foo
,Bar
,Baz
和Plotting
都被视为顶级模块,因此您和#39;我想让他们的名字独一无二,这样他们就不会与其他软件包/模块发生冲突。 (例如MyPackageFoo
之类的约会,而不是Foo
。)