Julia本地模块加载失败求助:PkgTemplates创建的模块无法跨会话加载
解决Julia模块无法跨会话加载的问题
我来帮你搞定这个模块加载的困扰,你遇到的情况其实是因为没让Julia正确识别你的开发模块,咱们一步步来解决:
1. 先确认模块结构是否标准
PkgTemplates生成的模块应该是这样的标准结构,先检查一下你的MyModule目录:
C:/Users/me/.julia/dev/MyModule/ ├── Project.toml ├── Manifest.toml └── src/ └── MyModule.jl
同时确保src/MyModule.jl的开头是module MyModule,结尾是end;如果想直接调用函数,记得在模块里加上export myfunction(把你需要直接调用的函数列出来)。
2. 推荐的正确加载方式:用Pkg开发模式
这是最靠谱的跨会话加载方法,在Julia会话里运行:
using Pkg Pkg.develop(path="C:/Users/me/.julia/dev/MyModule")
运行完之后,不管哪个新会话,只要输入using MyModule就能直接加载模块了。而且之后修改模块代码,还可以用Revise.jl实现热重载(开发时特别方便):
using Revise, MyModule # 修改模块代码后,不需要重新加载,直接就能用更新后的函数
3. 如果不想用Pkg.develop,正确设置LOAD_PATH
之前push!(LOAD_PATH, path)无效,大概率是因为你加错了路径——你需要添加的是模块的根目录,而不是src子目录。正确的命令是:
push!(LOAD_PATH, "C:/Users/me/.julia/dev/MyModule") using MyModule
这样Julia就能找到模块的Project.toml和src里的代码,正常加载模块。
关于include的补充说明
你用include("C:/Users/me/dev/MyModule/src/MyModule.jl")能生效,但只能用MyModule.myfunction()调用,是因为include只是把代码加载到当前会话,但没有把它注册成一个可导入的包。如果想用这种方式直接调用函数,可以在include之后加:
include("C:/Users/me/dev/MyModule/src/MyModule.jl") using .MyModule # 注意前面的点,代表当前会话中的模块 myfunction() # 现在就能直接调用了
不过这种方式只是临时生效,关闭会话后就没了,不如用前面两种方法持久。
内容的提问来源于stack exchange,提问作者ilker_arslan
相关产品推荐
相关产品推荐

