求助,using 的 module 与文件名不同时,会Not found


图中target1.jl中 有 target1 和 target2 两个module,
而在get.jl中 用push!改变路径后,using与文件名相同的target1 一切正常,
而 using target2 会 not found.
简言之,只能using和文件同名的module,
请问一下这是julia1.5的设计吗?或者我该怎样处理这个问题呢?

target1.jl
module target1
export foo
foo()=print(“target1”)
end
module target2
export goo
goo()=print(“target2”)
end

get.jl
push!(LOAD_PATH,“.”)
using target1
foo()
using target2
goo()

TERMINAL:
julia> push!(LOAD_PATH,“.”)
4-element Array{String,1}:
“@”
@v#.#”
@stdlib
“.”

julia> using target1

julia> foo()
target1
julia> using target2
ERROR: ArgumentError: Package target2 not found in current path:

  • Run import Pkg; Pkg.add("target2") to install the target2 package.

Stacktrace:
[1] require(::Module, ::Symbol) at .\loading.jl:893

julia> goo()
ERROR: UndefVarError: goo not defined
Stacktrace:
[1] top-level scope at REPL[5]:1

首先不推荐使用push LOAD_PATH的方法去加载包,这显然是在hack Julia的module系统。

和文件名相同是1.0时期就有的,但是这个是为了实现issue4600留的feature。加载本地的module请使用dev。相关文档可以在Pkg的文档里查到。或者在pkg模式下 ?dev 回车也可以

1 个赞

我在学习您的MyArrays这个教程,您能够在test.jl里面直接using MyArrays这个module没报错是单纯地因为和文件同名吗?这样一个文件存放一个同名module可以当作解决找不到module的简单方法吗?
您说的dev我看了文档,好像是改github上的已存在包的,我现在是还没上传到github。
另外问一下在julia中是不是package和module是一个概念?我是超级小白 :sweat_smile:

不是。module是用来管理命名域的,package是一个完整的工程+一些额外的要求(比如test,版本等等)。在Julia里只要生成一个project文件夹,里面的和Project同名的在src目录下的module就可以直接using。