Snakemake 包装器中(bio)conda 版本的最佳实践?

Best practices for (bio)conda versions in Snakemake wrappers?

使用 conda 在 Snakemake 包装器中指定包的最佳 environment.yml 做法是什么? 我理解频道应该是:

channels:    
  - conda-forge
  - bioconda
  - base

但是,什么是指定包的好选择?我不指定版本吗?完整版本?

使用完整版导致之前使用infinite/super长的conda环境解决问题。但是,不固定版本会带来隐式升级到包的不兼容版本的风险。

我是只指定直接依赖关系,还是应该将 conda env export 的输出放在那里以便所有内容都被冻结?

对于包版本 数字,我通常会选择固定主要版本和次要版本。这样,用户将在创建环境时获得最新的安全补丁和错误修复,而不会以向后不兼容的方式进行任何更改(只要开发人员正确遵循 semantic versioning)。

另外,我 只指定直接依赖关系 并让环境求解器处理任何隐式依赖关系。这提供了一定程度的自由来满足不同包的不同需求,而通常包的配方应该指定对特定版本的任何限制。

另一种避免(未来)冲突并保持快速创建环境的方法是保持环境尽可能小和精细 ()。如果不同的规则只共享一些依赖关系而不共享其他依赖关系,我宁愿为每个规则创建单独的最小环境,也不愿重用更大的环境。 Snakemake 包装器无论如何都会这样做,因为每个包装器都有自己的环境定义。

,同样适用于频道:只指定您实际使用的频道,不需要指定base任何频道更多的。并且在使用mamba时,可以指定bioconda作为第一个通道。

谈到 mamba:如果速度很重要,我目前 使用 mamba to do the environment solving -- it is usually much faster than conda and is better at ensuring that you get the most up to date version of packages. In snakemake, you can use it via --conda-frontend mamba as also pointed out in

但是,当然一切总是取决于。如果您知道包的配方未处理的版本不兼容,则可能需要指定和固定隐式依赖项。如果您的软件创建的输出可以随补丁版本而变化,那么您当然必须固定补丁版本。