Snakemake 仅限本地

Snakemake Local-Only

我的 objective 很简单:我想只在本地保留某些规则并且 将输出上传到我们的 Amazon S3 存储桶。

在文档中,我看到 keep_local=True,它在处理后将远程文件保存在本地驱动器上。但是,这不是我想要的,因为这不会阻止规则将输出上传到 Amazon S3。

Snakemake 目前充当 Amazon S3 和我的本地驱动器之间的镜像。

作为参考,这就是我们使用 Snakemake 设置 Amazon S3 的方式。

# run command

snakemake --default-remote-provider S3 --default-remote-prefix '$s3' --use-conda --cores 32 --rerun-incomplete --printshellcmds

# inside Snakemake

S3 = S3RemoteProvider(access_key_id=config["s3_params"]["access_key_id"], secret_access_key=config["s3_params"]["secret_access_key"])

# example of rule all

#Runs all rules
rule all:
  input:
    expand(["{sample}.demultiplex_fastqc.zip",
            "{sample}.demultiplex_fastqc.html"],
            sample=samples["sample"]),

    expand(["{sample}.adapterTrim.round2.rmRep.metrics"],
            sample=samples["sample"])

# etc...

至少有两个选项:

  1. 继续使用snakemake --default-remote-provider S3 --default-remote-prefix '$s3'并将应该保存在本地的文件用local(some_file):
  2. 包装起来
rule some_rule:
    output:
        local("my_file.txt") # will not be uploaded to s3
  1. 使用不带 s3snakemake 作为默认提供程序,并使用 S3.remote:
  2. 显式包装远程文件
from snakemake.remote.S3 import RemoteProvider as S3RemoteProvider
S3 = S3RemoteProvider()

rule some_rule:
    output:
        S3.remote("my_file.txt") # will be uploaded to S3