如何在 Julia 中正确加载模块?
How to properly load a module in Julia?
我已经阅读了很多 Julia 文档(0.4 版),但在加载 Julia 文件时仍然遇到问题。这看起来应该很容易。那么,简单明了,我们应该如何在当前代码中直接使用来自其他文件的 Julia 代码?而且,作为一个相关的、有用的奖励,是否有任何历史或语言设计决策可以理解并阐明这种情况?
P.S。我正在使用 0.4.
如果您想了解具体问题,这里是我正在处理的一些事情:
第一个
使用REPL,我想使用我在不同文件中编写的一些功能。据说,我应该能够像这样加载所述文件:
julia> using Foobar
无论我做什么,这只会给我 ArgumentErrors。在尝试使用它之前,我已经尝试包含它:
julia> include("Foobar.jl")
julia> using Foobar
我也试过在尝试使用它之前更新加载路径:
julia> push!(LOAD_PATH, "/Users/me/julia")
julia> using Foobar
第二个
当我尝试通过在使用前包含该文件来修复第一个问题时,我收到任何包含以下内容的行的错误:using ...
。消息是在路径中找不到模块。或者换句话说,我试图在当前工作目录中加载一个模块,该模块依赖于当前工作目录中的另一个模块。当我包含要加载的文件时,它会尝试找到依赖项但找不到。
第三
我试过相对路径。 IE。我在与 .jl 文件相同的目录中并执行:
julia> using .Foobar
如果您使用 include("/path/to/myscript.jl")
,那么您应该可以访问您使用 include()
调用的文件中定义的任何函数、对象等。不需要额外调用 using
。
这里有一个答案,提供了有关创建整个包(而不是像上面示例中的单个脚本)的详细信息、如何创建它们以及 using
术语如何影响它们的更多信息: 。例如,包必须安装在相对于其他 julia 文件的特定路径中,而不仅仅是安装在脚本所在的任意工作目录中。
另请参阅 here 以获取有关包的更长教程。
这里似乎工作得很好:
julia> push!(LOAD_PATH, "/Users/me/julia")
2-element Array{ByteString,1}:
"/Applications/Julia-0.4.5.app/Contents/Resources/julia/local/share/julia/site/v0.4"
"/Users/me/julia"
julia> readdir(LOAD_PATH[end])
1-element Array{ByteString,1}:
"MyModule.jl"
julia> using MyModule
julia> x
"Hi there"
其中 MyModule.jl 包含:
module MyModule
export x
x = "Hi there"
end
我已经阅读了很多 Julia 文档(0.4 版),但在加载 Julia 文件时仍然遇到问题。这看起来应该很容易。那么,简单明了,我们应该如何在当前代码中直接使用来自其他文件的 Julia 代码?而且,作为一个相关的、有用的奖励,是否有任何历史或语言设计决策可以理解并阐明这种情况?
P.S。我正在使用 0.4.
如果您想了解具体问题,这里是我正在处理的一些事情:
第一个
使用REPL,我想使用我在不同文件中编写的一些功能。据说,我应该能够像这样加载所述文件:
julia> using Foobar
无论我做什么,这只会给我 ArgumentErrors。在尝试使用它之前,我已经尝试包含它:
julia> include("Foobar.jl")
julia> using Foobar
我也试过在尝试使用它之前更新加载路径:
julia> push!(LOAD_PATH, "/Users/me/julia")
julia> using Foobar
第二个
当我尝试通过在使用前包含该文件来修复第一个问题时,我收到任何包含以下内容的行的错误:using ...
。消息是在路径中找不到模块。或者换句话说,我试图在当前工作目录中加载一个模块,该模块依赖于当前工作目录中的另一个模块。当我包含要加载的文件时,它会尝试找到依赖项但找不到。
第三
我试过相对路径。 IE。我在与 .jl 文件相同的目录中并执行:
julia> using .Foobar
如果您使用 include("/path/to/myscript.jl")
,那么您应该可以访问您使用 include()
调用的文件中定义的任何函数、对象等。不需要额外调用 using
。
这里有一个答案,提供了有关创建整个包(而不是像上面示例中的单个脚本)的详细信息、如何创建它们以及 using
术语如何影响它们的更多信息:
另请参阅 here 以获取有关包的更长教程。
这里似乎工作得很好:
julia> push!(LOAD_PATH, "/Users/me/julia")
2-element Array{ByteString,1}:
"/Applications/Julia-0.4.5.app/Contents/Resources/julia/local/share/julia/site/v0.4"
"/Users/me/julia"
julia> readdir(LOAD_PATH[end])
1-element Array{ByteString,1}:
"MyModule.jl"
julia> using MyModule
julia> x
"Hi there"
其中 MyModule.jl 包含:
module MyModule
export x
x = "Hi there"
end