环境从默认环境继承包

Ado*_*uka 7 dependency-management julia virtual-environment

注意:这个问题指的是Julia v1.5。当然,任何时候答案都应该理想地回答最新版本的问题。

Julia 安装提供了一个默认环境(称为,例如@v1.5)。当在某个工作目录中运行 Julia 时,可以julia>] activate .创建一个新环境或激活当前环境(如果当前文件夹包含诸如 之类的文件Project.toml)。

当 Julia 代码在某个环境中运行时,该环境定义了可以通过using或导入哪些包(或模块) import但是,始终可以使用默认环境中安装的软件包。我还没有在文档中看到这个事实(尽管可能提到过),并在花了一些时间追踪丢失的导入后“艰难地”了解到了这一点。

这有优点也有缺点:有时人们觉得需要使用不属于项目真正一部分的包,例如用于分析或调试。如果这些安装在默认环境中,则可以使用它们而不会污染项目依赖项。另一方面,add尽管项目使用了某个包,但可能会忘记将某个包添加到项目的环境中。Project.toml在这种情况下,其他用户无法从和重现必要的环境Manifest.toml。(向 Julia 启动时运行的 Julia 脚本添加重要代码也可能有这个缺点)。

在我看来,有几种方法可以解决这个问题:

  1. 随意使用从默认环境继承的包(以及 Julia 启动时的脚本),并通过 CI 进行广泛的单元测试以实现可重复性
  2. 切勿将包添加到默认环境中。注意不要在 Julia 启动时在脚本中导入包。
  3. 只需将您想要的所有包包含在项目/清单文件中,无论实际存储库代码是否使用它们。

我的问题:是否有更多(更好?)的方法来处理这个问题?哪种选择对 Julia 来说是惯用的?

Dav*_*ela 7

LOAD_PATH负责确定哪些环境构成有效环境。默认情况下,它包括活动环境、默认环境和 stdlibs。

Pkg.test当由(或等效的)激活时,测试pkg> test将使用仅由正在测试的项目组成的无菌加载路径运行。因此测试只能访问由各自的Project.tomlManifest.toml文件定义的依赖关系图。

在默认环境中包含实用程序(例如分析工具)似乎是标准做法。

如果您不喜欢这种行为,您可以修改LOAD_PATH启动文件以仅包含活动项目。