Julia 环境从默认环境继承包

Julia 环境从默认环境继承包,julia,dependency-management,virtual-environment,Julia,Dependency Management,Virtual Environment,注:此问题涉及Julia v1.5。当然,在任何时候,答案最好也能回答最新版本的问题 Julia安装提供了一个默认环境(例如称为@v1.5)。在某个工作目录中运行Julia时,可以使用Julia>]activate.创建新环境或激活当前环境(如果当前文件夹包含Project.toml等文件) 当Julia code在某个环境中运行时,该环境定义了哪些包(或模块)可以通过使用或导入。但是,始终可以使用默认环境中安装的软件包。我还没有看到文档中提到的这一事实(尽管很可能提到过),在花了一些时间追踪丢

注:此问题涉及Julia v1.5。当然,在任何时候,答案最好也能回答最新版本的问题

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

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

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

在我看来,处理这个问题有几种方法:

  • 随意使用从默认环境继承的包(以及在Julia启动时编写脚本),并使用带有大量单元测试的CI进行再现性测试
  • 切勿将包添加到默认环境中。注意不要在启动时在脚本中导入包
  • 只需在项目/清单文件中包含您想要的所有包,而不管实际的存储库代码是否使用它们
  • 我的问题:有更多(更好的)方法来处理这个问题吗?Julia惯用的选择是什么?

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

    当被
    Pkg.test
    (或等效的
    Pkg>test
    )激活时,测试将在无菌加载路径下运行,该路径仅包含正在测试的项目。因此,测试只能访问由相应的
    Project.toml
    Manifest.toml
    文件定义的依赖关系图

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

    如果不喜欢此行为,可以在启动文件中修改
    LOAD\u PATH
    ,使其仅包含活动项目