如何在Julia的单个脚本中使用同一模块的多个不同版本或分支?
e.g。如果我想对每个标记版本进行基准测试。
(最近有人问了一个类似的问题我回答错了,但不过这可能会有用。)
编辑:我自己已经回答了这个问题,但我相信他们可能会有更好的方法!
答案 0 :(得分:4)
你可以git checkout一个不同版本的模块,然后使用benchmarkTools.jl进行基准测试。但是,最好使用多个脚本(或者至少忽略第一次试用)(有关详细信息,请参阅此评论Importing multiple versions of the same Module/Package for Benchmarking)。
e.g。
packagedir = Pkg.dir("DSP")
version2checkout = "v0.0.7"
run(`cd $packagedir`); run(`git checkout tags/$version2checkout`)
import DSP
# do all your benmarking stuff
# start again
防止您必须复制模块,但我猜仍然有点笨重。 你甚至可以通过捕获git标签
的输出在许多版本的循环中完成它for i in readlines(`git tag`)
version2checkout = chomp(i)
# checkout version and benchmark
end
答案 1 :(得分:1)
另请注意Pkg.checkout
采用可选的branch
参数:
help?> Pkg.checkout
checkout(pkg, [branch="master"]; merge=true, pull=true)
Checkout the Pkg.dir(pkg) repo to the branch branch. Defaults to checking
out the "master" branch. To go back to using the newest compatible released
version, use Pkg.free(pkg). Changes are merged (fast-forward only) if the
keyword argument merge == true, and the latest version is pulled from the
upstream repo if pull == true.
所以你可以做Pkg.checkout("MyPackage", "v0.6.0")
。为确保重新加载模块,workspace()
函数可能会派上用场;或者可以为每个包版本执行新的Julia流程。