如何给bioconda贡献recipes

标签: Linux  anaconda  bioconda

bioconda是conda中专门用来管理生物信息相关软件的频道。

绝大部分的用户都是利用bioconda安装软件,绝大部分的教程也都是教大家如何去使用bioconda安装软件。但是bioconda的便利性 并不是从天而降的,而是无数的软件开发者持续的不断的贡献和更新一些软件的recipe (菜谱) 的结果。这篇教程就是教大家如何在一个软件没有bioconda的安装方式时,自己动手写一个菜谱。

准备工作

首先,我们在https://github.com/bioconda/bioconda-recipes 上fork该项目到自己的GitHub项目下,然后将其clone到本地

git clone https://github.com/xuzhougeng/bioconda-recipes.git
cd bioconda-recipes

  • 1
  • 2
  • 3

如果一不小心克隆使用了官方的项目或者我的项目,也可以通过如下命令进行修改

git remote rm origin
git remote add origin 你的github地址
  • 1
  • 2

由于bioconda是建立在conda基础上的频道,因此我们还需要预先安装好 conda,关于conda 的安装、配置和使用可以看我上传到哔哩哔哩的视频。之后安装 conda-build, 用于创建conda软件包的框架。

# 安装conda-build, 后续用于创建模板
conda install conda-build

  • 1
  • 2
  • 3

实际流程

向bioconda贡献一个软件的菜谱大致分为6步:

  1. 创建分支

  2. 编辑recipes

  3. 推送修改

  4. 创建pull请求

  5. 删除你的分支

  6. 安装你的包

第一步: 创建分支

我们需要先切换到主分支(master), 并保证你的主分支处于最新状态

git checkout master
git pull upstream master
git push origin master
  • 1
  • 2
  • 3

接下来,我们创建新的分支,用于处理当前的菜谱,避免影响主分支

git checkout -b update_My_recipes
  • 1

我建议这里的 update_My_recipes 修改成具体的软件名,这样更有标识性。

第二步: 编辑recipe

我们使用 conda skeleton 创建一个软件包框架, 这里pypi指的是软件托管在pypi上,wgdi则是软件名。

# bioconda-recipes目录下
cd recipes
conda skeleton pypi wgdi 
  • 1
  • 2
  • 3

因为wgdi存在一些依赖环境,如PAML, MAFFT, MUSCLE, PAL2NAL, 所以我们需要修改 wgdi/meta.yaml 文件,在其中加入这些软件。

  run:
    - biopython
    - matplotlib
    - numpy
    - pandas >=1.1.0
    - python 
    - scipy
    - paml
    - mafft
    - muscle
    - pal2nal

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

事实上,conda skeleton 只是做了一小部分事情,我目前的meta.yaml 还不完整,直到后续的递交中修改了数十次才知道出问题的地方以及如何修改。

因此建议后还需要查阅 https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html 了解meta.yaml的更多知识。

第三步: 向GitHub上推送更新

这里就是用git命令将我们的修改推送到GitHub上

# bioconda-recipes目录下
git add recipes/wgdi
git commit -m "add wgdi recipes"
git push origin update_My_recipes
  • 1
  • 2
  • 3
  • 4

第四步: 创建pull 请求

此时,让我们回到GitHub 中我们fork的bioconda-recipes页面。我们可以看到该修改已经被推送到GitHub上。

compare & pull request

我们点击 Compare & pull request, 接着就会弹出一个页面,介绍如何书写提交申请。

Add title

这里写了4点要求,分别为

  1. 在PR中加入Add或者update 作为用于说明目的,必须是第一个词

  2. 如果该项目和生物学领域无关,建议换个地方。

  3. 一旦通过了审核,需要在后续的issue中加入 @BiocondaBot please add label, 具体区别在后面的命令说明中有提到。

  4. 如果有问题,你可以到Gitter或者在评论中用 @bioconda/core 提出自己的问题。

当你提出PR之后,bioconda 的构建系统就会测试我们提交的菜谱。如果通过了测试,我们就可以跳转到下一步,否则需要重复第二~四步,直到通过为止。

我们发现在提交之后,构建系统就提示了一个问题。

lint problem

点开Details,会出现如下的界面。我们可以点击View more details on CircleCI Checks 去聊了解更加详细的信息。

view problem

lint问题的修改建议可在bioconda的对应页面为 https://bioconda.github.io/contributor/linting.html 进行查找。我把自己遇到的问题放在文末,毕竟是第一次,对于自动化测试系统并不了解,所以我反复修改了十多次。

当我们的菜谱最终通过了自动化测试后,接下来就可以在我们的issue中留言 @bioconda-bot add label ,让机器人增加标签,然后等待管理员review同意你的PR,当然也需要你进行修改才行。

add label

第五步: 删除分支

当我们的Pull Request被合并之后,我们就可以在GitHub上删除我们的分支,或者在本地删除

# Delete local branch
git branch -D update_My_recipes
# Delete branch in your fork via the remote named "origin"
git push origin -d update_My_recipes
  • 1
  • 2
  • 3
  • 4

第六步: 安装你的包

经过前面五步之后,你需要再等待一会,才能让你的包被加入到bioconda频道中。一旦被加入到bioconda频道,那么所有人都可以非常容易的通过conda来安装你得工具了。

conda install -c bioconda wgdi
  • 1

其他

在我配置 wgdi包的时候,遇到了如下几种错误

ERROR: recipes/wgdi/meta.yaml:0: uses_matplotlib: The recipe uses `matplotlib`, but `matplotlib-base` is recommended
ERROR: recipes/wgdi/meta.yaml:16: should_be_noarch_generic: The recipe should be build as `noarch`
ERROR: recipes/wgdi/meta.yaml:4: folder_and_package_name_must_match: The recipe folder and package name do not match.
  • 1
  • 2
  • 3

根据我的错误,我在原来的yaml文件中做了如下的更改

  • uses_matplotlib: 将原来的matplotlib 替换成matplobtlib-base

  • should_be_noarch_generic: 在build下增加 noarch: generic (这一步有问题,请继续往后阅读找到正确答案,此处保留时为了记录我的思考过程)

  • folder_and_package_name_must_match: 在配置文件开头增加 {% set name = "wgdi" %}

之后在test-linu时,我遇到了 ModuleNotFoundError: No module named 'wgdi'报错。这个问题和之前的 should_be_noarch_generic密切相关。noarch指的是平台无关,也就是这个软件不需要额外的编译就可以使用。一般这类软件通常是Java编译后的包,而非Python包。我最初根据提示的 should_be_noarch_generic 增加的 noarch: generic 实际并不正确,实际应该是 noarch: python, 也就是表示我们包依赖的Python平台。

参考资料:

版权声明:本文为u012110870原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012110870/article/details/112909736

智能推荐

多字节字符序列无效

编译成功,但提示多字节字符序列无效 编译环境 :VS 2019 报错截图: 修改方法: 代码修改(36~41行): 意外发现:...

LintCode 1835. 停在原地的方案数1 JavaScript算法

描述 有一个长度为 arrLenarrLen 的数组,开始有一个指针在索引 00 处。 每一步操作中,你可以将指针向左或向右移动 11 步,或者停在原地(指针不能被移动到数组范围外)。 给你两个整数 stepssteps 和 arrLenarrLen ,请你计算并返回:在恰好执行 stepssteps 次操作以后,指针仍然指向索引 00 处的方案数。 由于答案可能会很大,请返回方案数 模 10^9...

Android中Paint、Canvas的基础方法用法

首先paint是画笔,可以根据paint中的方法设置画笔的颜色、大小等等属 性,canvas是画布,用paint画笔可以在画布上画东西 代码准备: canvas中的方法:(将下面讲解的代码分别放入注释位置即可使用) 1、绘制单点: 方法:canvas.drawPoint(float x, float y, Paint mPaint); 参数:x:点的x轴位置;y:点的y轴位置;Paint:自定义画笔...

十,Future设计模式

场景介绍 Future模式是多线程开发中非常常见的一种设计模式,它的核心思想是异步调用。这类似我们日常生活中的在线购物流程,带在购物网看着一件商品时可以提 交表单,当订单完成后就可以在家里等待商品送货上门。或者说更形象的是我们发送Ajax请求的时候,页面是异步的进行后台处理,用户无需等待请求的结果, 可以继续浏览或操作其他内容。 参与角色 Future模式的主要角色有: Main:系统启动,调用Fut...

小程序支付系列

  小程序支付,涉及一些知识。 在微信提供的接口文档中提供了一个微信支付接口,应该是直接调用这个接口就可以发起微信支付 文档路径:https://developers.weixin.qq.com/miniprogram/dev/api/api- pay.html#wxrequestpaymentobject          但是,当开始信...

猜你喜欢

两个变量相乘_无废话学编程基础(C++篇)3: 变量,赋值语句

【现实需求】 今天我们要做一个小的应用程序,先说一说需求: 我们日常会去水果店买水果 例如, 苹果5元/斤 香蕉12元/斤 橘子6元/斤 买完了水果要去结账了,现在很少看着人手敲计算器了吧。 如果有一个小的应用程序可以解决这个问题不是更好吗? 要完成这样一个小的应用程序,需要知道以下几个基本概念: 顺序结构 变量 语句,赋值语句 输入和输出 顺序结构 首先我们来看一下什么是程序的顺序结构。 写程序...

wifi放大器速度_放大器的速度有多快?

wifi放大器速度 AMP has caused quite the stir from a philosophical perspective, but the technology hasn’t received as close of a look. A few weeks ago, Ferdy Christant wrote about the unfair advantage...

Java IO讲解(一)

Java IO讲解 一、简介 二、Java IO类库基本架构 三、Java IO类型划分 四、既然有了字节流,为什么还要有字符流? 五、字节字符相互转换 一、简介 IO(输入输出)问题是Web应用所面临的的主要问题这一,因为在当前这个海量数据时代,数据在网络中随处流动。在这个数据流动的过程当中都涉及IO问 题,大部分应用系统的瓶颈都是IO瓶颈。 二、Java IO类库基本架构 ①基于字节操作的抽象类...

部署HPC集群的实施方案

部署HPC集群的实施方案 济南友泉软件有限公司 一、系统配置 1.1 网络拓扑 1.2 操作系统 登录节点:CentOS Linux release 7.3.1611 管理节点:CentOS Linux release 7.3.1611 计算节点:CentOS Linux release 7.9.2009, 二、计算节点、登录节点配置 2.1 域名设置 在登录节点、所有计算节点上执行以下命令,完成...

docker基本介绍&docker镜像&docker常用命令

1.docker介绍 2.docker镜像 3.docker常用管命令 4.dockerfile编写和应用(真实企业应用) 5.docker中网络部分讲解 1.docker介绍 1.什么是docker Docker 是应用最广泛的开源容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 docker实质就像虚拟机一样,就好像是一个具有独立操作系统的真实机器 虚拟机是有真正的linux...