environment.yml使用 conda 在 Snakemake 包装器中指定包的最佳实践是什么?我明白渠道应该是:
channels:
- conda-forge
- bioconda
- base
Run Code Online (Sandbox Code Playgroud)
但是,指定包的好选择是什么?我是否指定没有版本?完整版?
使用完整版本导致之前使用无限/超长 conda 环境解析问题。但是,不固定版本会带来隐式升级到不兼容版本的包的风险。
我是只指定直接依赖项还是应该将输出放在conda env export那里以便一切都被冻结?
对于包版本号,我通常会选择固定主要和次要版本。通过这种方式,用户在创建环境时将获得最新的安全补丁和错误修复,而不会以向后不兼容的方式进行任何更改(只要开发人员正确遵循语义版本控制)。
此外,我只会指定直接依赖项,并让环境求解器处理任何隐式依赖项。这提供了一定程度的自由来满足不同包的不同需求,而通常包的配方应该指定对特定版本的任何限制。
另一种避免(未来)冲突并保持环境快速创建的方法是保持环境尽可能小和细化(请参阅下面的 Johannes 评论)。如果不同的规则只共享一些依赖项而不共享其他依赖项,我宁愿为每个规则创建单独的最小环境,而不是重用更大的环境。Snakemake 包装器无论如何都会这样做,因为每个包装器都有自己的环境定义。
正如约翰内斯所指出的,这同样适用于频道:只指定您实际使用的频道,无需再指定base频道。并且在使用时mamba,您可以指定bioconda为第一个通道。
谈论mamba:如果速度很重要,我目前会使用mamba来解决环境问题——它通常比 conda 快得多,并且更能确保您获得最新版本的软件包。在 中snakemake,您可以通过--conda-frontend mamba在Maarten 对问题的评论中指出的那样使用它。
但是,当然一切都取决于。如果您知道包的配方未处理的版本不兼容,则可能需要指定和固定隐式依赖项。如果您的软件可以创建可以随补丁版本更改的输出,那么您当然必须固定补丁版本。
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |