如何确保 Julia 代码和相关依赖项的可重复性?

How do I ensure repeatability of Julia code and assoicated dependencies?

假设我有一个正在执行分析的项目(即不打算开发可共享的包)但我想确保其他人可以克隆存储库并实例化依赖项和 运行 编写的代码.

到目前为止我已采取的步骤:

  1. 在自己的文件夹中创建代码
  2. 使该文件夹成为 Julia 环境(通过 activate . 在 REPL 的包模式中)
  3. add编辑了我正在使用的包

这会锁定依赖项的版本吗?或者我是否需要手动将 [compat] 条目添加到 Project.toml 文件?如果 [compat] entreis 是必需的,有没有办法在 add 打包时自动包含该条目?

是否有确保可重复性的总体方法?

Does this lock in the versions of the dependencies?

如果您提交 Project.tomlManifest.toml,那么其他人就可以克隆该存储库,激活该项目并执行 import Pkg; Pkg.instantiate() 下载与清单中记录的完全相同的版本。

Does this lock in the versions of the dependencies?

是的,确切的版本记录在 Manifest.toml 文件中,因此只要该文件未被修改,它们就会被锁定。

Or do I need to manually add [compat] entries to the Project.toml file?

您不必这样做。这仅在有人执行调用解析器的包操作时才重要,例如 pkg> add ...pkg> up。如果您的代码依赖于某个特定版本的包,您可以随时将其添加到 [compat] 部分。例如,如果您依赖需要软件包 X 版本 1.3.0 的功能,您可以添加

[compat]
X = "1.3"

这将确保,即使有人调用包解析器,您也将至少获得包 X.

的版本 1.3