动态导入模块时如何让Snakemake识别子模块的config.yml
Snakemake子工作流模块加载独立配置文件的问题
背景
我刚接触科学工作流,正在构建首个较复杂的Snakemake工作流。
配置与尝试操作
我正在动态导入模块。当前根目录下的config.yml内容如下:
subworkflows: - subwf-1 - subwf-2 - other-subwf
根目录Snakefile代码:
configfile: 'config.yml' ALL_SUBWFS = config['subworkflows'] # <省略> 检查最低版本6.0 for MODULE in ALL_SUBWFS: module MODULE: snakefile: f'subworkflows/{MODULE}/Snakefile' use rule * from MODULE as f'{MODULE}_*'
这段代码目前运行正常,但我希望为每个子模块配置独立的config.yml,目录结构如下:
. ├── Snakefile ├── config.yml └── subworkflows/ ├── subwf-1/ │ ├── Snakefile │ └── config.yml ├── subwf-2/ │ ├── Snakefile │ └── config.yml └── other-subwf/ ├── Snakefile └── config.yml
我尝试了两种方案均失败:
- 方案1:主工作流定义
configfile: config.yml,子工作流中尝试三种方式指定自身的config.yml:
# 写法1 cf = str(workflow.source_path('config.yml')) # 写法2 cf = f'{workflow.basedir}/config.yml' # 写法3 cf = 'config.yml' configfile: cf
所有写法均报错:KeyError in <...>/Snakefile: 'config'。
- 方案2:模块导入时传递全局配置,子工作流中读取对应字段:
主工作流导入模块时添加config: config,子工作流中写VALUES = config['values'],报错KeyError in <...>/Snakefile: 'values'。
核心疑问
我的假设是否正确:Snakemake模块无法直接加载自身目录下的config.yml,必须依赖全局配置文件,比如在全局config.yml中为每个子工作流设置单独的键,再通过config: config['<子工作流配置键>']传递给子模块?
内容的提问来源于stack exchange,提问作者s.d
相关产品推荐
相关产品推荐

