如何在 JuliaBox 笔记本中使用我自己的模块?

How do I use my own modules in a JuliaBox notebook?

我最近开始使用 JuliaBox 在 Julia 中进行编程,我想使用我之前使用 Juno-Atom IDE 编写的自己的模块。我已将相关模块上传到 JuliaBox,但我无法从 JuliaBox 笔记本调用它们。我得到的错误信息如下:

using MyModule

ArgumentError: Module MyModule not found in current path.
Run `Pkg.add("MyModule")` to install the MyModule package.

Stacktrace:
 [1] _require(::Symbol) at ./loading.jl:435
 [2] require(::Symbol) at ./loading.jl:405
 [3] include_string(::String, ::String) at ./loading.jl:522

我最初将该模块放在一个名为 'modules' 的单独文件夹中,但即使将其移至主文件夹(与笔记本相同的位置),我仍然收到相同的错误消息。

我确定了工作目录:

pwd()
"/mnt/juliabox"

..这似乎是我的模块当前存储的文件夹。至少,这是我尝试在 JuliaBox 主屏幕上移动模块文件时显示的目录。

我确实尝试在 Package Builder 下将模块安装为未注册的包(我感到绝望了!),但这也没有用。

所以我想知道是否需要在环境变量中的JULIA_LOAD_PATH中添加一些东西;然而,这似乎违背了使用在线版 Jupyter notebooks 的初衷,这大概是为了方便在任何地方访问。

无论如何,我 运行 没有想法,所以如果有人能告诉我我哪里出错了,我们将不胜感激。

如果您的模块文件在主文件夹中,请将其添加到 LOAD_PATH(默认情况下不添加)。如果您将文件放在其他地方,请自定义路径。

 @everywhere push!(LOAD_PATH, homedir())
 import MyModule

include("MyModule.jl") # if it is already in pwd()
import MyModule

该问题与 JuliaBox 或 IJulia 无关。这就是您导入 Module 的方式。您可以将文件夹放在 LOAD_PATHinclude 包含模块的文件中。

https://docs.julialang.org/en/stable/manual/modules/#Relative-and-absolute-module-paths-1

我相信 Github 上的这个问题解决了您面临的问题:https://github.com/JuliaLang/julia/issues/4600

I did try installing the module as an unregistered package under Package Builder (I was getting desperate!), but that didn't work either.

我认为程序包生成器功能运行正常。只需尝试创建一个具有以下结构和内容的虚拟模块:

~/MyModule.jl> tree 
.
├── REQUIRE
└── src
    ├── functions
    │   └── myfunc.jl
    └── MyModule.jl

2 directories, 3 files
~/MyModule.jl> cat REQUIRE 
julia 0.6
~/MyModule.jl> cat src/functions/myfunc.jl 
myfunc(x) = 2x
~/MyModule.jl> cat src/MyModule.jl 
module MyModule

export myfunc

include(joinpath("functions", "myfunc.jl"))

end

然后,git init目录内的一个存储库,git addgit commit所有文件,添加一个远程存储库(如在GitHub或GitLab上)用git remote add,并且 git push 你的本地存储库到新添加的远程存储库。您应该看到未注册的软件包选项按预期工作。

剩下的就是打电话

julia> using MyModule

julia> myfunc(10)
20

编辑。 您可以尝试将 https://github.com/aytekinar/MyModule.jl 作为未注册的包添加到您的 JuliaBox 中。该存储库托管 above-mentioned 虚拟模块。