这篇回答最初是针对 Julia 0.4.5 写的。现在有一种更简单的方法可以导入本地文件(请参见 @kiliantics 的回答)。但是,我会保留这篇回答,因为它解释了从其他目录加载文件的几种方法,这些方法仍然可能有用。
已经有一些简短的答案了,但如果可能的话,我希望提供一个更完整的答案。
当您运行 using MyModule
时,Julia 仅会在称为您的 LOAD_PATH
的目录列表中搜索该模块。如果您在 Julia REPL 中键入 LOAD_PATH
,您将得到类似以下内容的输出:
2-element Array{ByteString,1}:
"/Applications/Julia-0.4.5.app/Contents/Resources/julia/local/share/julia/site/v0.4"
"/Applications/Julia-0.4.5.app/Contents/Resources/julia/share/julia/site/v0.4"
这些是Julia搜索模块以包含在 using Hello
中的目录。在您提供的示例中,由于 Hello
不在您的 LOAD_PATH
中,Julia无法找到它。
如果您想要包含本地模块,可以相对于当前工作目录指定其位置。
julia> include("./src/Hello.jl")
一旦文件被包含,您可以像平常一样运行using Hello
来获得完全相同的行为。对于一次性脚本,这可能是最好的解决方案。但是,如果您发现自己经常需要include()
某个特定集合的目录,则可以将它们永久添加到您的LOAD_PATH
中。
将目录添加到LOAD_PATH
中
如果您希望经常使用存储在Julia LOAD_PATH
之外的特定模块,手动将目录添加到LOAD_PATH
可能会很麻烦。在这种情况下,您可以将额外的目录附加到LOAD_PATH
环境变量中。然后,每当您发出import
或using
命令时,Julia都会自动搜索这些目录。
其中一种方法是将以下内容添加到您的.basrc
, .profile
, .zshrc
文件中。
export JULIA_LOAD_PATH="/path/to/module/storage/folder"
这将把该目录追加到Julia将搜索的标准目录中。如果您随后运行
julia> LOAD_PATH
它应该返回
3-element Array{ByteString,1}:
"/path/to/module/storage/folder"
"/Applications/Julia-0.4.5.app/Contents/Resources/julia/local/share/julia/site/v0.4"
"/Applications/Julia-0.4.5.app/Contents/Resources/julia/share/julia/site/v0.4"
现在,您可以自由运行using Hello
, 只要模块存储在/path/to/module/storage/folder
文件夹下,Julia将自动查找该模块。
有关更多信息,请查看Julia文档中的此页面。
using .name
语句。执行include("./name")
就足以将文件及其函数导入到当前脚本中。 - theferrit32include
和using
本质上是不同的。就像C/C++一样,include
将指定文件的源代码带入调用文件中,就好像在调用文件中直接编写了其他文件一样。另一方面,using
并不关心文件(除非在LOAD_PATH
中找到具有相同名称的文件)。 它用于将特定模块的符号导入到调用模块中。 一个文件可以定义多个模块,每个模块都需要对兄弟模块调用using
或import
以便访问它们的函数。 - Kiruse