使用conda在Snakemake中指定包的最佳environment.yml实践是什么?据我所知,有关的渠道应该是:
channels:
- conda-forge
- bioconda
- base但是,什么是指定包的好选择呢?我是否指定没有版本?全版?
使用全版本导致了以前使用无限/超长conda环境的问题。但是,没有固定版本就有可能间接升级到包的不兼容版本。
我是只指定直接依赖项,还是应该将conda env export的输出放在那里,以便冻结一切?
发布于 2020-10-29 15:43:26
对于包版本编号,我通常会选择固定主要和次要版本的。这样,用户在创建环境时将获得最新的安全补丁和bug修复,而不应以向后不兼容的方式更改(只要开发人员正确地遵循语义版本化)。
此外,我将只指定直接依赖项,并让环境解决程序处理任何隐式依赖项。这为满足不同软件包的不同需求提供了一定程度的自由,而通常包的配方应该指定对特定版本的任何限制。
另一种避免(未来)冲突和保持环境创建快速的方法是,将环境保持尽可能小且尽可能细化(,见约翰下文的评论)。如果不同的规则只共享一些依赖关系,而不共享其他规则,我宁愿为每个规则创建单独的最小环境,也不愿重用更大的环境。Snakemake包装器无论如何都会这样做,因为每个包装器都有自己的环境定义。
正如约翰斯所指出的,同样适用于通道:只指定实际使用的通道,不再需要指定base通道。在使用mamba时,可以指定bioconda作为第一个通道。
谈到mamba:如果速度重要,我现在会使用 曼巴 来解决环境问题--它通常比conda快得多,并且更好地确保您获得最新版本的软件包。在snakemake中,您可以通过--conda-frontend mamba使用它,正如马滕对这个问题的评论中所指出的那样。
但是,当然,一切都取决于。如果您知道包的菜谱没有处理的版本不兼容,那么指定和固定隐式依赖项是必要的。如果您的软件创建了可以随修补程序版本更改的输出,那么您当然必须将补丁版本钉在脚上。
https://stackoverflow.com/questions/64594146
复制相似问题