Snakemake包装器中(bio)conda版本的最佳做法?

时间:2020-10-29 15:22:35

标签: conda snakemake

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

channels:    
  - conda-forge
  - bioconda
  - base

但是,指定软件包的最佳选择是什么?我没有指定版本吗?完整版本?

使用完整版本之前曾导致使用无限/超长conda环境的问题。但是,不固定版本会带来隐式升级到软件包不兼容版本的风险。

我仅指定直接依赖项还是应该将conda env export的输出放在此处,以便冻结所有内容?

1 个答案:

答案 0 :(得分:7)

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

此外,我将仅指定直接依赖项,并让环境求解器处理所有隐式依赖项。这提供了一定的自由度,可以满足不同软件包的不同需求,而通常,软件包的配方应指定对特定版本的任何限制。

避免(未来)冲突并保持环境快速创建的另一种方法是保持环境尽可能的小巧see Johannes' comment below)。如果不同的规则仅共享一些依赖关系,而不共享其他依赖关系,我宁愿为每个规则创建单独的最小环境,而不是重用更大的环境。 Snakemake包装器仍会执行此操作,因为每个包装器都有自己的环境定义。

As Johannes pointed out,同样适用于频道:仅指定您实际使用的频道,而不再需要指定base频道。并且在使用mamba时,可以将bioconda指定为第一个频道。

讨论mamba:如果速度很重要,我目前会使用mamba来解决环境问题-通常,它比conda快得多,并且可以确保您将获得最新版本的软件包。在snakemake中,您也可以通过--conda-frontend mamba使用它,如Maarten's comment to the question所指出。

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