断言错误或snakemake:错误:参数--snakefile/-s:使用 Snakemake 管道时需要一个参数

问题描述 投票:0回答:1

我正在尝试运行 Snakemake 管道,但它要么遇到断言错误,要么 Snakemake 由于某种原因无法找到 Snakefile。我通过 Snakefile、config.yml 文件和 bash 脚本运行管道。

代码:

Config.yml 文件:

REPO_DIR="/path/to/pipeline"

REF_FASTA ="$REPO_DIR/data/genome/sacCer3.fasta"

FASTQ_DIR="$REPO_DIR/pipelinetest/fastq"
OUTPUT_DIR="$REPO_DIR/pipelineoutput"
ANC_DIR="$REPO_DIR/pipelineanc"

LOG_FILE="$OUTPUT_DIR/00_logs/pipeline.log"
SNAKE_FILE="$REPO_DIR/workflow/Snakefile.py"
CONFIG_FILE="$REPO_DIR/config/config.yml"

cd $REPO_DIR

Bash 脚本:


#!/bin/bash

# activate conda env
source activate pipeline_env

# run the pipeline
snakemake --cores --snakefile snakefile=$SNAKE_FILE --configfile snakefile config_file=$CONFIG_FILE \
--config output_dir=$OUTPUT_DIR fastq_dir=$FASTQ_DIR anc_dir=$ANC_DIR ref_fasta=$REF_FASTA\
--use-conda --conda-prefix="$HOME/.snakemake/conda"

echo -e "\nDONE!\n"

snakefile 的一部分:


import os
import json
from datetime import datetime


# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Define Constants ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #

# discover input files using path from run config
SAMPLES = list(set(glob_wildcards(f"{config['fastq_dir']}/{{sample}}_R1_001.fastq.gz").sample))

# read output dir path from run config
OUTPUT_DIR = config['output_dir']

# Project name and date for bam header
SEQID='pipeline_align'


# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Begin Pipeline ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #

# https://snakemake.readthedocs.io/en/v7.14.0/tutorial/basics.html#step-7-adding-a-target-rule 
rule all:
    input:
        f'{OUTPUT_DIR}/DONE.txt'


# ~~~~~~~~~~~~~~~~~~~~~~~~~~ Set Up Reference Files ~~~~~~~~~~~~~~~~~~~~~~~~~ #

#
# export the current run configuration in JSON format
#
rule export_run_config:
    output:
        path=f"{OUTPUT_DIR}/00_logs/00_run_config.json"
    run:
        with open(output.path, 'w') as outfile:
            json.dump(dict(config), outfile, indent=4)


#
# make a list of discovered samples
#
rule list_samples:
    output:
        f"{OUTPUT_DIR}/00_logs/00_sample_list.txt"
    shell:
        "echo -e '{}' > {{output}}".format('\n'.join(SAMPLES))


#
# copy the supplied reference genome fasta to the pipeline output directory for reference
#
rule copy_fasta:
    input:
        config['ref_fasta']
    output:
        f"{OUTPUT_DIR}/01_ref_files/{os.path.basename(config['ref_fasta'])}"
    shell:
        "cp {input} {output}"


rule index_fasta:
    input:
        rules.copy_fasta.output
    output:
        f"{rules.copy_fasta.output}.fai"
    conda:
        'envs/main.yml'
    shell:
        "samtools faidx {input}"


rule create_ref_dict:
    input:
        rules.copy_fasta.output
    output:
        f"{rules.copy_fasta.output}".rstrip('fasta') + 'dict'
    conda:
        'envs/main.yml'
    shell:
        "picard CreateSequenceDictionary -R {input}"

#
# create a BWA index from the copied fasta reference genome
#
rule create_bwa_index:
    input:
        rules.copy_fasta.output
    output:
        f"{rules.copy_fasta.output}.amb",
        f"{rules.copy_fasta.output}.ann",
        f"{rules.copy_fasta.output}.bwt",
        f"{rules.copy_fasta.output}.pac",
        f"{rules.copy_fasta.output}.sa",
    conda:
        'envs/main.yml'
    shell:
        "bwa index {input}"  

然后我开始将祖先文件和示例文件放入管道中。然而,问题发生在 Snakefile 执行的上游。我尝试过重新安装 git repo,但没有成功。我还尝试在 bash 脚本中回显文件路径,但仍然找不到 Snakefile。我正在将 bash 脚本提交到集群,但它几乎立即失败。

如何确保通过 bash 脚本识别 Snakefile?

错误: 断言 v 不是 None 断言错误

snakemake:错误:参数 --snakefile/-s:需要一个参数

我使用 mamba 作为包管理器。

python python-3.x bash snakemake
1个回答
3
投票

shell 调用应更改为:

snakemake --cores --snakefile "$SNAKE_FILE" --configfile config_file ...

其中

...
是命令的其余部分。主要问题是
--snakefile
(或
-s
)需要一个指向 Snakefile 的字符串路径,而不需要任何其他关键字。同样,
--configfile
不需要更多关键字。

© www.soinside.com 2019 - 2024. All rights reserved.