生产环境下的Julia软件包版本控制

6

如果您想在生产环境中使用Julia,该如何对版本进行控制呢?换言之,大多数Julia包和Julia本身具有0.3.10或类似的版本号,因此您应该为(即将到来的)未来的主要界面更改做好准备,特别是当第一个数字从0翻转到1时。

我的软件包状态大致如下:

julia> Pkg.status()
4 required packages:
 - DataFrames                    0.6.9
 - Gadfly                        0.3.13
 - Jewel                         1.0.5
 - Mongo                         0.1.3
44 additional packages:
 - ArrayViews                    0.6.3
 - BinDeps                       0.3.15
 - Calculus                      0.1.10
 - Codecs                        0.1.4
 - Color                         0.4.7
 - Compat                        0.6.0
 - Compose                       0.3.13
 - Contour                       0.0.7
 - DataArrays                    0.2.17
 - DataStructures                0.3.12
etc...

建议您经常使用 Pkg.update(),以便在所有软件包上获得最新的补丁。

如果您需要更新软件包以应用这些补丁,或者需要使用新功能,则可能会破坏代码,并且各种软件包之间可能存在依赖关系。

尽管Julia是一种成熟的语言,不存在严重的版本控制问题,但我认为有必要询问Julia用户的体验和意见。

2个回答

9
在生产环境中,你不应该经常使用Pkg.update(),或者至少在非生产环境中进行测试后再使用。这对于任何打包系统都是正确的,不仅适用于Julia。
特别地,在Julia中,我建议你建立一个适合你的版本集,并在你的REQUIRE文件中使用适当的下限和上限。
例如,假设JuMP 0.9.2和Gadfly 0.4.2都适合我,我可能会在~/.julia/v0.3/REQUIRE中执行以下操作:
JuMP 0.9.2 0.10
Gadfly 0.4.2 0.5

这样,如果我运行Pkg.update(),我将获得0.9.30.4.3(如果它们发布),但我不会自动升级到JuMP 0.10。当然,这仅适用于您信任软件包维护者合理使用版本号的情况,这是一个严重的问题,特别是当它们是1.0之前的版本。


5

DeclarativePackages.jl包(https://github.com/rened/DeclarativePackages.jl)允许您为每个项目指定要使用的每个软件包的确切版本:它使用这些软件包的确切版本启动Julia。这听起来可能是您正在寻找的东西。


嗯,听起来非常有用,尤其是对于新手来说,面对Julia包的困扰。迟早,Julia的创造者们应该开始考虑一个严肃的包管理系统,就像人们为各种JavaScript库/框架编写的那样。 - Ferenc
没有听说过太多的“包烦恼”。在许多方面,Pkg 的工作方式非常类似于 npmpip,其中很多差异都是有意识的决定。 - IainDunning

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接