Snakemake使用--use-singularity时本地资源挂载及文件访问问题
Snakemake 容器挂载规则与常见场景解答
核心结论:Snakemake默认自动挂载的路径
- 执行snakemake命令的工作流根目录,容器内的默认工作目录与该路径完全一致,路径无需做映射转换
- 所有在规则的
input/output/log/temp/protected字段中显式声明的文件对应的父目录 - 执行snakemake时通过
--singularity-args "-B 宿主机路径:容器内路径"参数手动指定的挂载路径
问题1:工作流内自定义Python脚本的访问方式
你不需要将myScript.py构建到容器中,也无需额外声明为输入文件:
- 只要该脚本存放在工作流根目录下,Snakemake会自动挂载该目录,容器内可直接访问
- 你当前规则中通过
params.basePath拼接路径的写法冗余且容易出错,可直接使用相对路径调用,修改后的shell命令片段如下:
| python3 scripts/myScript.py \ --input /dev/stdin \ --prefix {wildcards.sample}
注意:该Python脚本依赖的第三方库需要提前内置到容器中,或配合conda环境在容器内安装。
问题2:大体积参考序列/数据库的使用方式
不需要将这类公共大文件内置到容器中,否则会导致容器镜像体积过大,启动、分发效率极低:
- 如果参考文件存放在当前工作流目录下,直接声明到规则的
input字段即可,Snakemake会自动挂载对应路径 - 如果参考文件是多项目共用的公共资源,存放在工作流目录外,执行snakemake时添加参数手动挂载即可:
snakemake --use-singularity --singularity-args "-B /公共参考库根目录:/公共参考库根目录"
手动挂载时保持宿主机和容器内路径一致,原有代码中调用参考文件的路径不需要做任何修改。
路径定位通用规则
编写shell命令时,只要文件属于上述自动挂载/手动挂载的路径范围,直接使用和宿主机完全相同的相对路径或绝对路径调用即可,无需额外修改路径格式。
内容的提问来源于stack exchange,提问作者Brendan Kohrn
相关产品推荐
相关产品推荐

