在不修改规则的情况下指定本地输入和 S3 输入的最佳方法?

Best way to specify local inputs and S3 inputs without modifying rules?

我有一个在本地 HPC 上运行的 snakemake 工作流程。我还想在 AWS 上使用此工作流程,使用 boto 根据需要将文件推送到 S3 或从 S3 推送文件。当与 --no-shared-fs 一起使用时,这可以避免 IO 问题。我当时认为最好的方法就是使用 --default-remote-provider S3 & --default-remote-prefix 来指定存储桶名称。但是,当调用此选项时,它会将 S3.remote & bucket 前缀附加到所有输入。这包括可执行程序,例如:bwa、samtools、bedtools 等。当 boto 尝试使用 boto 下载这些程序时,它不会保留可执行权限。

是否有无需修改规则即可指定 "local" 输入与 S3 输入的好方法?这样,如果我需要 change/improve,我可以只保留 1 个版本的工作流程。

感谢您的帮助!

您可以使用local(...) 将本地文件括起来,类似于标记临时文件的方式。这样,它们将被排除在默认远程应用程序之外。

请注意,工具通常不应是输入或输出文件。考虑使用 snakemake conda 集成和 bioconda 进行软件部署和规范: http://snakemake.readthedocs.io/en/stable/snakefiles/deployment.html#integrated-package-management