Conda 以及 Snakemake 安装及使用

防止自己下次忘了,作为笔记使用,整理自网络。
参考自Snakemake:简单好用的生信流程搭建工具 | | 百迈客生物 (biomarker.com.cn)
参考自conda安装与使用 - 知乎 (zhihu.com)

1. Conda 的安装及使用

1.1 Conda 的下载

从国内的清华源下载 Conda 的安装文件

wget -c https://mirrors.bfsu.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh

1.2 Conda 的安装

bash Miniconda3-latest-Linux-x86_64.sh

第一次安装一路yes确认即可,安装后,~/.bashrc 中已经有了conda的路径,不需要添加环境变量


image-20221030100913742.png

如果添加环境变量的话,则运行

vim ~/.bashrc
#在文件的最后一行添加
export PATH = $PATH:/where/the/conda/bin #找到conda安装路径下bin所在路径

此时运行conda create将会报错

Anaconda创造虚拟环境时"An HTTP error occurred when trying to retrieve this URL."

这时则需要自己为conda添加channel,具体方法如下

#添加镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/

添加完镜像之后,查看频道信息

conda config --set show_channel_urls yes            #显示已经安装的频道
conda config --get channels                             #查看安装的频道
vim ~/.condarc                                              #编辑conda的配置文件
#然后删除最后一行,-defaults

至此,conda 的安装已经完成, 运行conda则会出现下面的提示信息

usage: conda [-h] [-V] command ...

conda is a tool for managing and deploying applications, environments and packages.

Options:

positional arguments:
  command
    clean        Remove unused packages and caches.
    compare      Compare packages between conda environments.
    config       Modify configuration values in .condarc. This is modeled after the git config command. Writes to the
                 user .condarc file (/home/qiang/.condarc) by default.
    create       Create a new conda environment from a list of specified packages.
    help         Displays a list of available conda commands and their help strings.
    info         Display information about current conda install.
    init         Initialize conda for shell interaction. [Experimental]
    install      Installs a list of packages into a specified conda environment.
    list         List linked packages in a conda environment.
    package      Low-level conda package utility. (EXPERIMENTAL)
    remove       Remove a list of packages from a specified conda environment.
    uninstall    Alias for conda remove.
    run          Run an executable in a conda environment.
    search       Search for packages and display associated information. The input is a MatchSpec, a query language
                 for conda packages. See examples below.
    update       Updates conda packages to the latest compatible version.
    upgrade      Alias for conda update.

optional arguments:
  -h, --help     Show this help message and exit.
  -V, --version  Show the conda version number and exit.

conda commands available from other packages:
  content-trust
  env

2. snakemake 的安装

2.1 snakemake 安装

conda create -n snakemake_env python snakemake
#创建一个名字为snakemake_env的虚拟环境,安装snakemake所需要的python3及snakemake

激活及关闭环境的命令

#进入snakemake_env 环境
conda actiater snakemaker_env
#退出 snakemake_env 环境
conda deactivate
#查看安装的环境列表
conda info --envs

如果你的conda安装很慢或者获取不了最新版本的软件,可以使用下面的命令安装:

conda install -c conda-forge mamba
mamba create -c conda-forge -c bioconda -n snakemake_env python snakemake
conda activate snakemake_env
snakemake --help

2.2 利用测试数据进行测试

2.2.1 数据准备

安装完成后,安装目录下,会产生了一个snakemake-tutorial文件夹,打开文件夹,看里面是否有完整的示例文件

image-20221030102959517.png

如果文件不完全,则删除里面的所有信息,然后重新下载解压缩

#下载示例信息
wget https://bitbucket.org/snakemake/snakemake-tutorial/get/v5.2.3.tar.bz2 --no-check-certificate
#解压缩并拷贝到snakemake-tutorial文件下
tar -xf v5.2.3.tar.bz2
cd snakemake-snakemake-tutorial-966f4bd988bb/
cp -r * ../
#删除下载的文件及解压缩后的文件
cd ../
rm -r snakemake-snakemake-tutorial-966f4bd988bb/
rm v5.2.3.tar.bz2

2.2.2 创建工作流文件: snakefile

#创建Snakefile文件
touch Snakefile.py

## dry run (不真正执行,只显示执行内容及顺序)
snakemake -n

当然工作流文件 Snakefile 文件名并不是固定的,位置也不是固定的。当你的工作流文件就在当前目录下,且名称正好是 Snakefile 时,就可以像上面的示例一样,不用指定具体的工作流文件,snakemake 会自动调取当前路径的名为 Snakefile 的文件去执行。如果你要执行其他路径的 Snakefile 或者其他的文件名的工作流文件,可以使用 -s 参数,例如:

#执行test.py文件,建议将工作流文件命名为 py 文件
snakemake -s -n test.py
rule bwa: #定义第一条规则,命名为bwa
    input: # input:指定输入
        "data/genome.fa",
        "data/samples/A.fastq"
    output: #output:指定输出
        "mapped/A.bam"
    shell: #指定执行方式,这里有三种方式:shell, run, script
        "bwa mem {input} | samtools view -Sb -> {output}"
image-20221031092244993.png

使用通配符升级规则
在我们实际运用中,我们可能会有很多的数据来进行比对,不可能把所有的文件名都写下来,因此我们需要使用通配符替代我们的文件名

rule bwa: #定义第一条规则,命名为bwa
    input: # input:指定输入
        "data/genome.fa",
        "data/samples/{sample}.fastq"
    output: #output:指定输出
        "mapped/{sample}.bam"
    shell: #指定执行方式,这里有三种方式:shell, run, script
        "bwa mem {input} | samtools view -Sb -> {output}"

然后dry run一下,这里需要加上规则的输出才能让含有通配符的程序正常运行

snakefile -n -s Snakefile.py mapped/{A,B,C}.bam # mapped/{A,B,C}.bam 指的时规则的输出

运行结果如下

image-20221031093153019.png

添加sort规则

#添加sort 规则
rule sort:
    input:
        "mapped/{sample}.bam"
    output:
        "mapped/{sample}.sorted.bam"
    shell:
        "samtools sort -o {output} {input}"

添加索引规则·

rule samtools_index:
    input:
        "mapped/{sample}.sorted.bam"
    output:
        "mapped/{samle}.sorted.bam.bai"
    shell:
        "samtools index {input}"

        
        

添加calling 规则

1. 首先在工作流文件开头定义一个变量:

samples = ["A", "B", "C"]

2. 然后使用 snakemake 的内置函数 expand:

bam=expand("mapped/{sample}.sorted.bam", sample=samples)
添加calling 规则
rule calling:
    input:
        fa="data/genome.fa",
        bam=expand("mapped/{sample}.sorted.bam", sample=samples),
        bai=expand("mapped/{sample}.sorted.bam.bai",sample=samples)
    output:
        "calling/all.vcf"
    shell:
        "samtools mpileup -g -f {input.fa} {input.bam}| "
        "bcftools call -mv ->{output}"           

调用自己写的脚本

当然,有时候在某个步骤想实现的功能并不能用简单的几句命令来实现,而且你自己也已经有了一个现成的脚本了,那么你就可以直接调用该脚本实现相应功能

rule calling:
    input:
        fa="data/genome.fa",
        bam=expand("mapped/{sample}.sorted.bam", sample=samples),
        bai=expand("mapped/{sample}.sorted.bam.bai",sample=samples)
    output:
        "calling/all.vcf"
    shell:
        "script/stat.py"  # 调用自己已经写好的脚本

最重要的一条规则:ALL

书写完上面的代码直接运行的话会直接报错,需要在规则文件的最签名添加一行

rule all:
    input:
        "calling/all.vcf" #这代表的是最后一个rule的输出文件,这样最能将所有的规则运行一遍了

生成可视化流程图

snakemake --dag -s Snakefile.py |dot -Tpdf >test.pdf
#初次使用可能出现如下报错
There is no layout engine support for "dot"
Perhaps "dot -c" needs to be run (with installer's privileges) to register the plugins?
#则需要运行
sudo dot -c 
#输入密码即可
test.jpg

完整的rule文件如下

samples=["A","B","C"]
rule all:
    input:
        "calling/all.vcf"
#bam = expand("mapped/{sample}.sorted.bam", sample=samples)
#rule bwa: #定义第一条规则,命名为bwa
#    input: # input:指定输入
#        "data/genome.fa",
#        "data/samples/A.fastq"
#    output: #output:指定输出
#        "mapped/A.bam"
#    shell: #指定执行方式,这里有三种方式:shell, run, script
#        "bwa mem {input} | samtools view -Sb -> {output}"
rule bwa: #定义第一条规则,命名为bwa
        input: # input:指定输入
            "data/genome.fa",
            "data/samples/{sample}.fastq"
        output: #output:指定输出
            "mapped/{sample}.bam"
        shell: #指定执行方式,这里有三种方式:shell, run, script
            "bwa mem {input} | samtools view -Sb -> {output}"
#添加sort 规则
rule sort:
    input:
        "mapped/{sample}.bam"
    output:
        "mapped/{sample}.sorted.bam"
    shell:
        "samtools sort -o {output} {input}"
rule samtools_index:
    input:
        "mapped/{sample}.sorted.bam"
    output:
        "mapped/{sample}.sorted.bam.bai"
    shell:
        "samtools index {input}"
rule calling:
    input:
        fa="data/genome.fa",
        bam=expand("mapped/{sample}.sorted.bam", sample=samples),
        bai=expand("mapped/{sample}.sorted.bam.bai",sample=samples)
    output:
        "calling/all.vcf"
    shell:
        "samtools mpileup -g -f {input.fa} {input.bam}| "
        "bcftools call -mv ->{output}"

运行完整的程序

snakemake -p -c all -s Snakefile.py

可能出现报错,没有安装相应的软件,可以通过conda instal 安装

conda install bwa samtools bcftools
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容