首页 文章 精选 留言 我的

精选列表

搜索[文献管理工具],共5875篇文章
优秀的个人博客,低调大师

Snapcraft 5.0 发布,Linux 软件包管理工具

Snapcraft 是一个用于 Linux 系统上的打包、分发与更新工具,由于绑定了依赖项,所以不需要修改就在所有主要 Linux 系统上运行。 Snapcraft 5.0 正式发布,更新内容如下: storeapi:改进 candid 的交互错误; cli:引入 metrics 命令; store:为 metrics 添加 API 支持; storeapi:为 metrics 引入数据模型模块; 更新 Crystal v1 插件; store: 添加 ReviewQueued 状态; cli:引入 echo.echo_with_pager_if_needed() ; cli:增加对并行远程构建的支持; project:验证元数据链接; cli:让远程构建更方便用户使用; dependencies:更新 click 到 8.0.1; meta:支持元数据链接; 更新 kde neon 扩展以使用 qt-5-15-3 的较新内容快照; storeapi:记录响应和注册错误代码; project:将核心警告转换为错误; ROS 插件 V2 的一些修复; snap:移除对传统 re-exec 的支持; 更多详情可查看:https://github.com/snapcore/snapcraft/releases/tag/5.0

优秀的个人博客,低调大师

PackOne —— 大数据软件栈部署和管理工具

PackOne 致力于实现主流大数据软件在云端的快速弹性部署。通过对云 API 和 Apache Ambari API 的联合调用,完成 Hadoop、Spark、NiFi、PiFlow、Kylin、MongoDB、Neo4J 等流行的大数据管理/处理软件在云端的一键部署和一键伸缩。主要特性包括: 支持在空白虚拟机上完成大数据处理集群的全自动部署。 通过 Apache Ambari 对已部署的大数据软件进行状态监控、配置管理。 通过将模版集群物化为系统镜像,实现新集群的分钟级快速部署。 通过集群节点的全自动增删,实现各类大数据软件处理能力的分钟级弹性伸缩。 在同一个界面上对来自不同云的虚拟机、存储卷、镜像、模版等进行 CURD 操作。 PackOne 支持不同类型的云平台。目前版本实现了对 OpenStack 和 EVCloud 两款私有云的适配。 PackOne 可执行程序包的安装、配置、运行方式都比较简单: 一、安装 选择一台能够访问目标云的 Linux 主机 (以 Centos 7.5 为佳),依次执行: pip install pk1 pip install -U pip setuptools 二、配置 创建一个Postgresql数据库实例,并准备好其连接信息,包括:db_user(数据库用户)、db_passwd(用户密码)、db_host(数据库主机地址)、db_port(数据库端口号)、db_name(数据库名)。然后执行: pk1 setup --database db_user:db_passwd:db_host:db_port:db_name (会提示设置管理员 admin 的邮箱、密码等信息。) 三、运行 PackOne 服务 pk1 start [--listening 0:11001] 四、快速上手:以 OpenStack 私有云为例 访问网址:http://packone-server-ip:11001 进入添加“云”的界面,输入如下图格式所示的 OpenStack 用户密钥信息。创建成功会自动导入云端的镜像、模版。然后进入 user/profiles 界面,为当前用户添加一个 profile,进入 user/balances 界面,为该 profile 在新添加的云上添加余额(大于零即可)。 回到云列表界面,选择刚才新创建的云,在操作下拉框点选“bootstrap…”按钮,触发在空白虚拟机上全自动部署模版集群的后台工作流。通过 clouds/operations 界面可监控工作流的执行进度,若遇到某步操作出错,可以点按 re-run 按钮重新执行,直至成功。 当工作流执行完毕后,可以在 engines/clusters 界面选择刚才创建的名为 bootstrap.<云名称>的模版集群,点按“Materialize the cluster as a scale”将其镜像化。最后,创建新集群时,可在 engines/cluster 的创建集群界面选择名为“packone.<云名称>”的 scale,实现新集群的快速创建。 五、停止PackOne服务 pk1 stop PackOne 目前以 Apache License V2.0协议在 Gitee 上开源,欢迎提交 Issue、PR。

优秀的个人博客,低调大师

Snapcraft 4.5 发布,Linux 软件包管理工具

Snapcraft 4.5发布了,Snapcraft 是一个用于任意 Linux 应用的打包、分发与更新工具,由于绑定了依赖项,所以不需要修改就在所有主要 Linux 系统上运行。 此版本主要更新内容包括: repo: 密钥管理重构@cjp256(#3359) project loader, schema: 为构建环境添加高级语法支持@cjp256(#3350) project: 为 core20 启动实验性的 target-arch 支持@cjp256(#3410) project: 始终设置 target arch 即使不交叉编译@cjp256(#3418) build(deps): 将 lxml 从 4.5.0 升级到 4.6.2@dependabot(#3404) 允许撤销验证声明@nessita(#3417) 添加使用 gnome-3-38-2004 and core20 的新的 gnome-3-38 扩展@kenvandine(#3407) project loader: 在构建环境中导出 SNAPCRAFT_TARGET_ARCH@cjp256(#3414) grammar: ensure all dictionary primitives are captured@cjp256(#3412) 修复 ros-related 测试文件中的一些许可协议@artivis(#3409) repo: 只安装标记为安装的构建包@cjp256(#3411) 更新详情查看:https://github.com/snapcore/snapcraft/releases/tag/4.5

优秀的个人博客,低调大师

nginxWebUI 1.3.9 发布,nginx 图形化管理工具

功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议转发, 反向代理, 负载均衡,日志管理和解析, ssl证书自动申请、续签、配置等, 最终生成nginx.conf文件并覆盖nginx的默认配置文件, 完成nginx的最终功能配置. 支持nginx服务器集群批量管理, 可批量发送配置文件, 批量执行重启和重载入的命令. 部署此项目后, 配置nginx再也不用上网各种搜索, 再也不用手动申请和配置ssl证书, 再也不用为了配多个nginx登录n遍服务器了, 只需要在本项目中进行增删改查就可方便的配置nginx和服务器集群。 nginx本身功能复杂, 本项目并不能涵盖nginx所有功能, 但支持配置的功能已经涵盖90%的nginx使用, 更高级的功能配置可根据需要在最终生成的nginx.conf中进行手动编写。 技术说明 本项目是基于springBoot的web系统, 数据库使用sqlite, 因此服务器上不需要安装任何数据库. 其中orm使用了本人自己开源的sqlHelper项目作为orm, 使用sqlite作为数据库, 项目启动时会释放一个sqlite.db到系统用户文件夹中, 注意进行备份. 本系统支持在系统内通过Let's encrypt申请和续签证书, 使用acme.sh脚本进行自动化申请, 开启续签的证书将在每天凌晨2点进行续签, 只有超过60天的证书才会进行续签.acme.sh只支持linux, 因此只能在linux中进行证书申请 同时提供jar与docker部署方式 本次更新内容 1. 更换证书申请模式为dns方式申请,申请期间不再占用nginx80端口,做到高可用,而且可以申请泛域名(*.domain.com)证书 2. 修改一些文字描述, 让使用更清晰明了 3. 修复大量bug与issue

优秀的个人博客,低调大师

nginxWebUI 1.2.9 发布,nginx 图形化管理工具

功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议转发, 反向代理, 负载均衡,日志管理和解析, ssl证书自动申请、续签、配置等, 最终生成nginx.conf文件并覆盖nginx的默认配置文件, 完成nginx的最终功能配置. 支持nginx服务器集群批量管理, 可批量发送配置文件, 批量执行重启和重载入的命令. 部署此项目后, 配置nginx再也不用上网各种搜索, 再也不用手动申请和配置ssl证书, 再也不用为了配多个nginx登录n遍服务器了, 只需要在本项目中进行增删改查就可方便的配置nginx和服务器集群。 nginx本身功能复杂, 本项目并不能涵盖nginx所有功能, 但支持配置的功能已经涵盖90%的nginx使用, 更高级的功能配置可根据需要在最终生成的nginx.conf中进行手动编写。 技术说明 本项目是基于springBoot的web系统, 数据库使用sqlite, 因此服务器上不需要安装任何数据库. 其中orm使用了本人自己开源的sqlHelper项目作为orm, 使用sqlite作为数据库, 项目启动时会释放一个sqlite.db到系统用户文件夹中, 注意进行备份. 本系统支持在系统内通过Let's encrypt申请和续签证书, 使用acme.sh脚本进行自动化申请, 开启续签的证书将在每天凌晨2点进行续签, 只有超过60天的证书才会进行续签.acme.sh只支持linux, 因此只能在linux中进行证书申请 同时提供jar与docker部署方式 本次更新内容 1.提供日志生成与解析功能,可方便的统计nginx上的访问频率与其他信息 2.修复一些bug

优秀的个人博客,低调大师

nginxWebUI 1.2.1 发布,nginx 图形化管理工具

功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, tcp协议转发, 反向代理, 负载均衡, ssl证书自动申请、续签、配置等, 最终生成nginx.conf文件并覆盖nginx的默认配置文件, 完成nginx的最终功能配置. 支持nginx服务器集群批量管理, 可批量发送配置文件, 批量执行重启和重载入的命令. 部署此项目后, 配置nginx再也不用上网各种搜索, 再也不用手动申请和配置ssl证书, 再也不用为了配多个nginx登录n遍服务器了, 只需要在本项目中进行增删改查就可方便的配置nginx和服务器集群。 nginx本身功能复杂, 本项目并不能涵盖nginx所有功能, 但支持配置的功能已经涵盖90%的nginx使用, 更高级的功能配置可根据需要在最终生成的nginx.conf中进行手动编写。 技术说明 本项目是基于springBoot的web系统, 数据库使用sqlite, 因此服务器上不需要安装任何数据库. 其中orm使用了本人自己开源的sqlHelper项目作为orm, 使用sqlite作为数据库, 项目启动时会释放一个.sqlite.db到系统用户文件夹中, 注意进行备份 . 本系统支持在系统内通过Let's encrypt申请和续签证书, 使用acme.sh脚本进行自动化申请, 开启续签的证书将在每天凌晨2点进行续签, 只有超过60天的证书才会进行续签.acme.sh只支持linux, 因此只能在linux中进行证书申请 本次更新内容 1. 提供docker镜像, 在一个docker镜像中同时安装了nginx和nginxWebUI, 一体化运行与管理更方便, WebUI兼容性更好, 更适合企业批量部署 下载镜像:docker pull registry.cn-hangzhou.aliyuncs.com/cym1102/nginxwebui:1.2.1 启动容器:docker run -itd --net=host registry.cn-hangzhou.aliyuncs.com/cym1102/nginxwebui:1.2.1 2. 远程管理中增加了可批量运行命令,可查看nginx运行与否 3. 增强了账号安全管理, 本项目涉及系统权限比较深, 必须加强安全管理

优秀的个人博客,低调大师

pip 20.1 发布,Python 包安装和管理工具

pip 20.1 已发布,可通过下面的命令进行升级: python -m pip install --upgrade pip 主要更新内容: 在构建本地目录时,通过更改行为以执行就地构建(in-place builds),而不是复制到临时目录,显著提升了构建本地目录的速度 通过对网络访问并行化,执行 pip list --outdated 命令速度显著提升,这也是 pip 代码库中并行代码的首个实例 新的pip cache 命令,可自检和管理 pip 的缓存目录 对于直接使用 url 安装的软件包,pip freeze 命令进行了优化 详情查看https://pip.pypa.io/en/latest/news/

优秀的个人博客,低调大师

LCPkg 0.2.1 发布,C/C++ 依赖管理工具

LCPkg 0.2.1 发布了,LCPkg 是一个用于管理 Windows C/C++ 项目依赖的命令行工具,它能够: 从 vcpkg 或 GitHub 安装依赖包 记录你项目的相关信息以及依赖库信息 将资源文件、头文件、库文件打包,方便其他人安装 这是第一个公开发行版,没有更新日志,以下介绍 lcpkg 的简单用法。 快速上手 先安装依赖: NodeJS Vcpkg 然后安装 lcpkg: npm install -g lcpkg 设置 vcpkg 的根目录路径: lcpkg config vcpkg.root /path/to/vcpkg 进入你的项目目录: cd /path/to/your/project 告诉 lcpkg 你的项目信息并创建 lcpkg.json 配置文件: lcpkg init 使用下面这样的命令安装你需要的依赖包: lcpkg install sdl2 curl 如果你的项目是一个 C/C++ 库并想发布给其他开发者使用,你可以打包它: lcpkg pack 这个命令会打包头文件、库文件等开发所需的文件,然后输出像下面这样的包文件: dist/yourlib_all.lcpkg.zip dist/yourlib_x86-windows.lcpkg.zip dist/yourlib_x64-windows.lcpkg.zip dist/yourlib_x86-uwp.lcpkg.zip dist/yourlib_x64-uwp.lcpkg.zip yourlib_all.lcpkg.zip文件是你项目支持的所有平台和架构版本包的集合, 你可以这样安装它: lcpkg install /path/to/yourlib_all.lcpkg.zip 如果你的项目是一个开源项目并且托管在GitHub.com上,你可以在每次发布发行版时将这些文件上传到发行版附件中,然后告诉你的用户这样安装你的包: lcpkg install github.com/yourusername/yourlib yourlib_all.lcpkg.zip文件的体积通常很大,我们建议你上传除它以外的文件,这样你的用户就不会花费太多时间在下载上。 常见问题 为什么不支持从码云(Gitee)下载依赖包?你不爱国了吗? 从码云(Gitee)下载附件需要验证用户名和密码,没法直接下载,这个问题虽然能解决但暂未列入开发计划。只能怪那些喜欢在码云上乱搞的碍国者,要是没有他们的话就不用处理这种问题了。 依赖包都是从哪下载的?可信吗? 这个不用担心,LCPkg 是调用 vcpkg 安装依赖包的,所有依赖包的下载地址和构建方式都是公开透明的。

优秀的个人博客,低调大师

phpMyAdmin 4.9.1 发布,基于 Web 的 MySQL 管理工具

phpMyAdmin 4.9.1发布,此版更新如下: 对 MySQL8.0.13及更高版本使用CURRENT_TIMESTAMP编辑列 解决 PHP 8 的兼容性问题 GIS 可视化的导出 其中部分排序规则类型的增强 修复文本字段导入和导出过程中的引号问题 改进向 Designer 中添加新表 修复了通过身份验证的用户可能在数据库服务器和 web 服务器之间触发大量通信量的问题 修复:攻击者在管理员使用安装脚本的同时,可以从安装脚本中删除服务器 详情见发布说明: https://www.phpmyadmin.net/news/

优秀的个人博客,低调大师

Percona Toolkit 3.1.0 发布,MySQL 管理工具包

Percona Toolkit 3.1.0 发布了,Percona Toolkit 是一组高级的命令行工具,用来管理 MySQL 和系统任务。 新特性与改进 PT-1696:新的 pt-pg-summary 工具,以类似于其他 PT 摘要工具的方式支持 PostgreSQL 数据收集。 PT-1663:有两个新选项可以限制 pt-stalk 消耗的磁盘空间量:-retention-size 选项使 pt-stalk 存储小于指定的兆字节数,而 --retention-count 选项限制保存数据的运行次数。 PT-1741:已迁移到新的 MongoDB 驱动 PT-1761:如果表有外键,pt-online-schema-change 将无法在 MySQL 8.0.14 .. 8.0.17 下运行重要的提示:从版本 8.0.14 到当前的 8.0.17,MySQL 在尝试重命名表时在某些条件下出错。由于 pt-online-schema-change 的最后一步是重命名表以交换旧的和新的,我们添加了一个检查,以防止在满足此错误的条件时运行 pt-online-schema-change。 新版本还包含不少 bug 修复,详情见更新说明。

优秀的个人博客,低调大师

API管理工具Swagger介绍及Springfox原理分析

swagger是一个API框架,号称世界上最流行的API工具。它提供了API管理的全套解决方案,比如API在线编辑器,API UI展示界面,代码生成器等诸多功能。 如果想引入swagger进行API管理。目前 springfox 是一个很好的选择,它内部会自动解析Spring容器中Controller暴露出的接口,并且也提供了一个界面用于展示或调用这些API。下图就是简单的一个使用springfox的API展示界面。 springfox的前身是swagger-springmvc,用于springmvc与swagger的整合。 如若在springboot项目中使用springfox,需要3个步骤: maven添加springfox依赖 启动类加上@EnableSwagger2注解 构造Docket bean用于展示API 配置完之后进入 http

优秀的个人博客,低调大师

snakemake--我最喜欢的流程管理工具

框架工具选择 A review of bioinformatics pipeline framework 的作者对已有的工具进行很好的分类 工具推荐 作者的看法: implicit,也就是Make rule语法更适合用于整合不同执行工具 基于配置的流程更加稳定,也比较适合用于集群分配任务。 最后作者建议是: 如果实验室既不是纯粹的生物学试验(不需要workbench这种UI界面),也不需要高性能基于类的流程设计, 不太好选, 主要原则是投入和产出比 如果实验室进行的是重复性的研究,那么就需要对数据和软件进行版本控制, 建议是 configuration-based pipelines 如果实验室做的是探索性的概念证明类工作(exploratory proofs-of-concept),那么需要的是 DSL-based pipeline。 如果实验室用不到高性能计算机(HPC),只能用云服务器,就是server-based frameworks. 目前已有的流程可以在awesome-pipeline 进行查找。 就目前来看,pipeline frameworks & library 这部分的框架中 nextflow 是点赞数最多的生物学相关框架。只可惜nextflow在运行时需要创建fifo,而在NTFS文件系统上无法创建,所以我选择 snakemake , 一个基于Python写的DSL流程框架。 环境准备 为了能够顺利完成这部分的教程,请准备一个Linux环境,如果使用Windows,则按照biostarhandbook(一)分析环境和数据可重复 部署一个虚拟机,并安装miniconda3。 如下步骤会下载所需数据,并安装所需要的软件,并且启动工作环境。 wget https://bitbucket.org/snakemake/snakemake-tutorial/get/v3.11.0.tar.bz2 tar -xf v3.11.0.tar.bz2 --strip 1 cd snakemake-snakemake-tutorial-623791d7ec6d conda env create --name snakemake-tutorial --file environment.yaml source activate snakemake-tutorial # 退出当前环境 source deactivate 当前环境下的所有文件 ├── data │ ├── genome.fa │ ├── genome.fa.amb │ ├── genome.fa.ann │ ├── genome.fa.bwt │ ├── genome.fa.fai │ ├── genome.fa.pac │ ├── genome.fa.sa │ └── samples │ ├── A.fastq │ ├── B.fastq │ └── C.fastq ├── environment.yaml └── README.md 基础:一个案例流程 如果你编译过软件,那你应该见过和用过make, 但是你估计也没有仔细想过make是干嘛用的。Make是最常用的软件构建工具,诞生于1977年,主要用于C语言的项目,是为了处理编译时存在各种依赖关系,尤其是部分文件更新后,Make能够重新生成需要更新的文件以及其对应的文件。 Snakemake和Make功能一致,只不过用Python实现,增加了许多Python的特性,并且和Python一样非常容易阅读。下面将使用Snakemake写一个变异检测流程。 第一步:序列比对 Snakemake非常简单,就是写各种rule来完成不同的任务。我们第一条rule就是将序列比对到参考基因组上。如果在命令行下就是bwa mem data/genome.fa data/samples/A.fastq | samtools view -Sb - > mapped_reads/A.bam。 但是按照Snakemake的规则就是下面的写法。 # 用你擅长的文本编辑器 vim Snakefile # 编辑如下内容 rule bwa_map: input: "data/genome.fa", "data/samples/A.fastq" output: "mapped_reads/A.bam" shell: """ bwa mem {input} | samtools view -Sb - > {output} """ 解释一下:这几行定义了一个规则(rule),在这个规则下,输入(input)有两个,而输出(output)只有一个,在shell中运行命令,只不过里面的文件都用{}形式替代。伪执行一下:snakemake -np mapped_reads/A.bam检查一下是否会出错,真实运行情况如下(不带规则,默认执行第一个规则): run snakemake 第二步:推广序列比对规则 如果仅仅是上面这样子处理一个文件,还无法体现snakemake的用途,毕竟还不如手动敲代码来的方便。snakemake的一个有点在于它能够使用文件名通配的方式对一类文件进行处理。将上面的A改成{sample},就可以将符合*.fastq的文件处理成*.bam. rule bwa_map: input: "data/genome.fa", "data/samples/{sample}.fastq" output: "mapped_reads/{sample}.bam" shell: """ bwa mem {input} | samtools view -Sb - > {output} """ 那么,用snakemake -np mapped_reads/{A,B,C}.bam,就会发现,他非常机智的就比对了B.fastq和C.fastq,而不会再比对一遍A.fastq, 也不需要你写一堆的判断语句去手动处理。 规则统配 当然,如果你用touch data/samples/A.fastq改变A.fastq的时间戳,他就会认位A.fastq文件发生了改变,那么重复之前的命令就会比对A.fastq。 第三步:比对后排序 比对后的文件还需要进一步的排序,才能用于后续分析,那么规则该如何写呢? rule samtools_sort: input: "mapped_reads/{sample}.bam" output: "sorted_reads/{sample}.bam" shell: "samtools sort -T sorted_reads/{wildcards.sample}" " -O bam {input} > {output}" 以之前的输出作为输出文件名,输出到另一个文件夹中。和之前的规则基本相同,只不过这里用到了wildcards.sample来获取通配名用作-T的临时文件的前缀sample实际名字。 运行snakemake -np sorted_reads/B.bam,你就会发现他就会非常智能的先比对再排序。这是因为snakemake会自动解决依赖关系,并且按照依赖的前后顺序进行执行。 第四步: 建立索引和对任务可视化 这里我们再写一个规则,对之前的排序后的BAM文件建立索引。 rule samtools_index: input: "sorted_reads/{sample}.bam" output: "sorted_reads/{sample}.bam.bai" shell: "samtools index {input}" 目前已经写了三个规则,那么这些规则的执行和依赖关系如何呢? snakemake提供了--dag选项用于dot命令进行可视化 snakemake --dag sorted_reads/{A,B}.bam.bai | dot -Tsvg > dag.svg 运行流程 第五步:基因组变异识别 基因组变异识别需要整合之前所有的BAM文件,你可能会打算这样写 rule bcftools_call: input: fa="data/genome.fa", bamA="sorted_reads/A.bam" bamB="sorted_reads/B.bam" baiA="sorted_reads/A.bam.bai" baiB="sorted_reads/B.bam.bai" output: "calls/all.vcf" shell: "samtools mpileup -g -f {input.fa} {input.bamA} {input.bamB} | " "bcftools call -mv - > {output}" 这样写的却没有问题,但是以后每多一个样本就需要多写一个输入,太麻烦了。这里就体现出Snakemake和Python所带来的特性了,我们可以用列表推导式的方法搞定。 ["sorted_reads/{}.bam".format(sample) for sample in ["A","B"]] 进一步,可以在规则外定义SAMPLES=["A","B"],则规则内的输入可以写成bam=["sorted_reads/{}.bam".format(sample) for sample in SAMPLES]. 由于列表推导式比较常用,但是写起来有点麻烦,snakemake定义了expand进行简化, 上面可以继续改写成expand("sorted_reads/{sample}.bam", sample=SAMPLES) 那么最后的规则就是 SAMPLES=["A","B"] rule bcftools_call: input: fa="data/genome.fa", bam=expand("sorted_reads/{sample}.bam", sample=SAMPLES), bai=expand("sorted_reads/{sample}.bam.bai", sample=SAMPLES) output: "calls/all.vcf" shell: "samtools mpileup -g -f {input.fa} {input.bam} | " "bcftools call -mv - > {output}" 小练习: 请用snakemake生成当前的DAG图。 第六步:编写报告 上面都是在规则里执行shell脚本,snakemake的一个优点就是可以在规则里面写Python脚本,只需要把shell改成run,此外还不需要用到引号。 rule report: input: "calls/all.vcf" output: "report.html" run: from snakemake.utils import report with open(input[0]) as vcf: n_calls = sum(1 for l in vcf if not l.startswith("#")) report(""" An example variant calling workflow =================================== Reads were mapped to the Yeast reference genome and variants were called jointly with SAMtools/BCFtools. This resulted in {n_calls} variants (see Table T1_). """, output[0], T1=input[0]) 这里还用到了snakemake的一个函数,report,可以对markdown语法进行渲染生成网页。 第七步:增加目标规则 之前运行snakemake都是用的snakemake 目标文件名, 除了目标文件名外,snakemake还支持规则名作为目标。通常我们按照习惯定义一个all规则,来生成结果文件。 rule all: input: "report.html 基础部分小结: 总结下学习过程,知识点如下: Snakemake基于规则执行命令,规则一般由input, output,shell三部分组成。 Snakemake可以自动确定不同规则的输入输出的依赖关系,根据时间戳来判断文件是否需要重新生成 Snakemake以{sample}.fa形式进行文件名通配,用{wildcards.sample}获取sample的实际文件名 Snakemake用expand()生成多个文件名,本质是Python的列表推导式 Snakemake可以在规则外直接写Python代码,在规则内的run里也可以写Python代码。 Snakefile的第一个规则通常是rule all,因为默snakemake默认执行第一条规则 进阶:对流程进一步修饰 在基础部分中,我们完成了流程的框架,下一步则是对这个框架进行不断完善,比如说编写配置文件,声明不同rule的消耗资源,记录运行日志等。 第一步: 声明所需进程数 对于一些工具,比如说bwa,多进程或者多线程运行能够大大加速计算。snakemake使用threads来定义当前规则所用的进程数,我们可以对之前的bwa_map增加该指令。 rule bwa_map: input: "data/genome.fa", "data/samples/{sample}.fastq" output: "mapped_reads/{sample}.bam" threads:8 shell: "bwa mem -t {threads} {input} | samtools view -Sb - > {output}" 声明threads后,Snakemake任务调度器就会在程序运行的时候是否并行多个任务。这主要和参数中的--cores相关。比如说 snakemake --cores 10 由于总体上就分配了10个核心,于是一次就只能运行一个需要消耗8个核心的bwa_map。但是当其中一个bwa_map运行完毕,这个时候snakemaek就会同时运行一个消耗8个核心的bwa_map和没有设置核心数的samtools_sort,来保证效率最大化。因此对于需要多线程或多进程运行的程序而言,将所需的进程单独编码,而不是硬编码到shell命令中,能够更有效的使用资源。 第二步:配置文件 之前的SAMPLES写在了snakefile,也就是意味这对于不同的项目,需要对snakefile进行修改,更好的方式是用一个配置文件。配置文件可以用JSON或YAML语法进行写,然后用configfile: "config.yaml"读取成字典,变量名为config。 config.yaml内容为: samples: A: data/samples/A.fastq B: data/samples/B.fastq YAML使用缩进表示层级关系,其中缩进必须用空格,但是空格数目不重要,重要的是所今后左侧对齐。上面的YAML被Pytho读取之后,以字典保存,形式为{'samples': {'A': 'data/samples/A.fastq', 'B': 'data/samples/B.fastq'}} 而snakefile也可以改写成 configfile: "config.yaml" ... rule bcftools_call: input: fa="data/genome.fa", bam=expand("sorted_reads/{sample}.bam", sample=config["samples"]), bai=expand("sorted_reads/{sample}.bam.bai", sample=config["smaples]) output: "calls/all.vcf" shell: "samtools mpileup -g -f {input.fa} {input.bam} | " "bcftools call -mv - > {output}" 虽然sample是一个字典,但是展开的时候,只会使用他们的key值部分。 关于YAML格式的教程,见阮一峰的博客:http://www.ruanyifeng.com/blog/2016/07/yaml.html 第三步:输入函数 既然已经把文件路径都存入到配置文件中,那么可以进一步的改写之前的bwa_map里的输入部分。也就是从字典里面提取到存放的路径。最开始我就是打算这样写 rule bwa_map: input: "data/genome.fa", config['samples']["{sample}"] output: "mapped_reads/{sample}.bam" threads:8 shell: "bwa mem -t {threads} {input} | samtools view -Sb - > {output}" 毕竟"{sample}"从理论上应该得到sample的名字。但是snakemake -np显示出现错误 KeyError in line 11 of /home6/zgxu/snakemake-snakemake-tutorial-623791d7ec6d/Snakefile: '{sample}' 这可能是{sample}的形式只能在匹配的时候使用,而在获取值的时候应该用基础第三步的wildcards.sample形式。于是继续改成config["samples"][wildcards.sample]。然而还是出现了错误。 name 'wildcards' is not defined 为了理解错误的原因,并找到解决方法,我们需要理解Snakemake工作流程执行的一些原理,它执行分为三个阶段 在初始化阶段,工作流程会被解析,所有规则都会被实例化 在DAG阶段,也就是生成有向无环图,确定依赖关系的时候,所有的通配名部分都会被真正的文件名代替。 在调度阶段,DAG的任务按照顺序执行 也就是说在初始化阶段,我们是无法获知通配符所指代的具体文件名,必须要等到第二阶段,才会有wildcards变量出现。也就是说之前的出错的原因都是因为第一个阶段没通过。这个时候就需要输入函数推迟文件名的确定,可以用Python的匿名函数,也可以是普通的函数 rule bwa_map: input: "data/genome.fa", lambda wildcards: config["samples"][wildcards.sample] output: "mapped_reads/{sample}.bam" threads: 8 shell: "bwa mem -t {threads} {input} | samtools view -Sb - > {output}" 第四步:规则参数 有些时候,shell命令不仅仅是由input和output中的文件组成,还需要一些静态的参数设置。如果把这些参数放在input里,则会因为找不到文件而出错,所以需要专门的params用来设置这些参数。 rule bwa_map: input: "data/genome.fa", lambda wildcards: config["samples"][wildcards.sample] output: "mapped_reads/{sample}.bam" threads: 8 params: rg="@RG\tID:{sample}\tSM:{sample}" shell: "bwa mem -R '{params.rg}' '-t {threads} {input} | samtools view -Sb - > {output}" 写在rule中的params的参数,可以在shell命令中或者是run里面的代码进行调用。 第五步: 日志文件 当工作流程特别的大,每一步的输出日志都建议保存下来,而不是输出到屏幕,这样子出错的时候才能找到出错的所在。snakemake非常贴心的定义了log,用于记录日志。好处就在于出错的时候,在log里面定义的文件是不会被snakemake删掉,而output里面的文件则是会被删除。继续修改之前的bwa_map. rule bwa_map: input: "data/genome.fa", lambda wildcards: config["samples"][wildcards.sample] output: "mapped_reads/{sample}.bam" params: rg="@RG\tID:{sample}\tSM:{sample}" log: "logs/bwa_mem/{sample}.log" threads: 8 shell: "(bwa mem -R '{params.rg}' -t {threads} {input} | " "samtools view -Sb - > {output}) 2> {log}" 这里将标准错误重定向到了log中。 第六步:临时文件和受保护的文件 由于高通量测序的数据量通常很大,因此很多无用的中间文件会占据大量的磁盘空间。而特异在执行结束后写一个shell命令清除不但写起来麻烦,而且也不好管理。Snakemake使用temp()来将一些文件标记成临时文件,在执行结束后自动删除。 rule bwa_map: input: "data/genome.fa", lambda wildcards: config["samples"][wildcards.sample] output: temp("mapped_reads/{sample}.bam") params: rg="@RG\tID:{sample}\tSM:{sample}" log: "logs/bwa_mem/{sample}.log" threads: 8 shell: "(bwa mem -R '{params.rg}' -t {threads} {input} | " "samtools view -Sb - > {output}) 2> {log}" 修改之后的代码,当samtools_sort运行结束后就会把"mapped_reads"下的BAM删掉。同时由于比对和排序都比较耗时,得到的结果要是不小心被误删就会浪费大量计算时间,最后的方法就是用protected()保护起来 rule samtools_sort: input: "mapped_reads/{sample}.bam" output: protected("sorted_reads/{sample}.bam") shell: "samtools sort -T sorted_reads/{wildcards.sample} " "-O bam {input} > {output}" 最后,snakemake就会在文件系统中对该输出文件写保护,也就是最后的权限为-r--r--r--, 在删除的时候会问你rm: remove write-protected regular file ‘A.bam’?. 进阶部分小结 使用threads:定义不同规则所需线程数,有利于snakemake全局分配任务,最优化任务并行 使用configfile:读取配置文件,将配置和流程分离 snakemake在DAG阶段才会知道通配的具体文件名,因此在input和output出现的wildcards就需要推迟到第二步。 在log里定义的日志文件,不会因任务失败而被删除 在params定义的参数,可以在shell和run中直接调用 temp()中的文件运行结束后会被删除,而protected()中的文件会有写保护,避免意外删除。 最后的代码如下 configfile: "config.yaml" rule all: input: "report.html" rule bwa_map: input: "data/genome.fa", lambda wildcards: config["samples"][wildcards.sample] output: temp("mapped_reads/{sample}.bam") params: rg="@RG\tID:{sample}\tSM:{sample}" log: "logs/bwa_mem/{sample}.log" threads: 8 shell: "(bwa mem -R '{params.rg}' -t {threads} {input} | " "samtools view -Sb - > {output}) 2> {log}" rule samtools_sort: input: "mapped_reads/{sample}.bam" output: protected("sorted_reads/{sample}.bam") shell: "samtools sort -T sorted_reads/{wildcards.sample} " "-O bam {input} > {output}" rule samtools_index: input: "sorted_reads/{sample}.bam" output: "sorted_reads/{sample}.bam.bai" shell: "samtools index {input}" rule bcftools_call: input: fa="data/genome.fa", bam=expand("sorted_reads/{sample}.bam", sample=config["samples"]), bai=expand("sorted_reads/{sample}.bam.bai", sample=config["samples"]) output: "calls/all.vcf" shell: "samtools mpileup -g -f {input.fa} {input.bam} | " "bcftools call -mv - > {output}" rule report: input: "calls/all.vcf" output: "report.html" run: from snakemake.utils import report with open(input[0]) as vcf: n_calls = sum(1 for l in vcf if not l.startswith("#")) report(""" An example variant calling workflow =================================== Reads were mapped to the Yeast reference genome and variants were called jointly with SAMtools/BCFtools. This resulted in {n_calls} variants (see Table T1_). """, output[0], T1=input[0]) 执行snakemake 写完Snakefile之后就需要用snakemake执行。snakemake的选项非常多,这里列出一些比较常用的运行方式。 运行前检查潜在错误: snakemake -n snakemake -np snakemake -nr # --dryrun/-n: 不真正执行 # --printshellcmds/-p: 输出要执行的shell命令 # --reason/-r: 输出每条rule执行的原因 直接运行: snakemake snakemake -s Snakefile -j 4 # -s/--snakefile 指定Snakefile,否则是当前目录下的Snakefile # --cores/--jobs/-j N: 指定并行数,如果不指定N,则使用当前最大可用的核心数 强制重新运行: snakemake -f # --forece/-f: 强制执行选定的目标,或是第一个规则,无论是否已经完成 snakemake -F # --forceall/-F: 也是强制执行,同时该规则所依赖的规则都要重新执行 snakemake -R some_rule # --forecerun/-R TARGET: 重新执行给定的规则或生成文件。当你修改规则的时候,使用该命令 可视化: snakemake --dag | dot -Tsvg > dag.svg snakemake --dag | dit -Tpdf > dag.pdf # --dag: 生成依赖的有向图 snakemake --gui 0.0.0.0:2468 # --gui: 通过网页查看运行状态 集群执行: snakemake --cluster "qsub -V -cwd -q 投递队列" -j 10 # --cluster /-c CMD: 集群运行指令 ## qusb -V -cwd -q, 表示输出当前环境变量(-V),在当前目录下运行(-cwd), 投递到指定的队列(-q), 如果不指定则使用任何可用队列 # --local-cores N: 在每个集群中最多并行N核 # --cluster-config/-u FILE: 集群配置文件

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册