安装配置Revise.lj后,在jupyter notebook里using FooBar我自己的module FooBar后,是不是在atom里修改了FooBar.jl后并不会重新加载这个module?
不知道大家开发比较复杂的工程, 涉及多个module的,是用什么开发流程比较高效率,纯用atom还是atom和jupyter notebook配合? 如果每次修改module都要重新编译的话感觉迭代效率有点低,还是说大家先在notebook里写好function测试好最后再整理到module?
用atom的external connection连接到 notebook kernel的话,好像2个不同的module, module1里using module2,都通过atom通信给kernel,不知道为什么会报找不到module2
可能之前哪里搞错了,现在没什么问题了。有没有工具能在module更新后自动把涉及的代码重新跑一遍的.
看起来比较正确的方式是用 push!(LOAD_PATH, “PATH_TO_JL_FOLDER”) 然后 分module里不用include,只用using
另外如果想在服务器上远程开发的话,目前有没有什么好用的方法,是不是只能等vscode插件完善
简单说一下,当你using Revise
之后,它会跟踪你的using和include(使用includet来包含文件),并在对应文件修改之后热更新一些代码。举个例子:在当前目录新建一个MyModule.jl
module MyModule
f(x)=x+1
end
然后想办法包含它(比如加到LOAD_PATH)里
julia> using Revise
julia> push!(LOAD_PATH,".")
4-element Array{String,1}:
"@"
"@v#.#"
"@stdlib"
"."
julia> using MyModule
[ Info: Precompiling MyModule [top-level]
julia> MyModule.f(1)
2
(修改f的实现,改为f(x)=x+2)
julia> MyModule.f(1)
3
(删掉f的定义)
julia> MyModule.f(1)
ERROR: MethodError: no method matching f(::Int64)
Stacktrace:
[1] top-level scope at REPL[9]:1
(增加g()=42的定义)
julia> MyModule.g()
42
如果你没修改类型定义之类的或者使用到生成函数,大部分修改应该都能跟踪到。如果更改没有生效,你可以检查一下Revise的跟踪状态,例如
julia> Revise.watched_files
Dict{String,Revise.WatchList} with 5 entries:
"C:\\Users\\Azure\\.juli… => WatchList(1.56666e9, Set(["dict_sorting.jl", "or…
"C:\\Users\\Azure\\.juli… => WatchList(1.56666e9, Set(["LoweredCodeUtils.jl"]…
"C:\\Users\\Azure\\.juli… => WatchList(1.56666e9, Set(["utils.jl", "pkgfiles.…
"C:\\Users\\Azure\\.juli… => WatchList(1.56666e9, Set(["utils.jl", "types.jl"…
"C:\\Users\\Azure\\Deskt… => WatchList(1.56666e9, Set(["MyModule.jl"]))
1 个赞
谢谢,虽然watched_files里有了我的文件,但改函数名字后并没有生效,不知道为啥
开发比较复杂的工程, 涉及多个module的,是用什么开发流程比较高效率
dev底层工具箱,修改,然后测试所有下游工具箱。比如说 ]dev ./ImageCore.jl
另外如果想在服务器上远程开发的话,目前有没有什么好用的方法,是不是只能等vscode插件完善
我现在用vscode,除了没有atom的图形化Profiling和变量区这两个功能外,别的都还挺好的。
先在notebook里写好function测试好最后再整理到module?
- 在了解代码逻辑,能够不用在REPL里测试就修改代码的情况下会直接修改代码,然后补充test
- 如果idea还不是特别清楚,会通过REPL或者jupyter或者之类的方式来验证一下idea的主要部分是不是能够正常工作,然后回到第一步慢慢整合进代码库