如何给bioconda贡献recipes

2024-06-23 19:48
文章标签 贡献 recipes bioconda

本文主要是介绍如何给bioconda贡献recipes,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

git remote rm origin
git remote add origin 你的github地址

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

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

实际流程

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

  1. 创建分支

  2. 编辑recipes

  3. 推送修改

  4. 创建pull请求

  5. 删除你的分支

  6. 安装你的包

第一步: 创建分支

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

git checkout master
git pull upstream master
git push origin master

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

git checkout -b update_My_recipes

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

第二步: 编辑recipe

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

# bioconda-recipes目录下
cd recipes
conda skeleton pypi wgdi 

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

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

事实上,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

第四步: 创建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

第六步: 安装你的包

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

conda install -c bioconda wgdi

其他

在我配置 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.

根据我的错误,我在原来的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平台。

参考资料:

  • meta.yaml: https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html

  • lint: https://bioconda.github.io/contributor/linting.html

这篇关于如何给bioconda贡献recipes的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088107

相关文章

【HDU】5321 Beautiful Set【枚举k求贡献,欧拉函数应用】

传送门: 【HDU】5321 Beautiful Set my  code: my~~code: #include <stdio.h>#include <string.h>#include <vector>#include <algorithm>using namespace std ;typedef long long LL ;#define clr( a , x ) memset

P4842 城市旅行(拆贡献 + LCT)

https://www.luogu.com.cn/problem/P4842 发现题目就是要维护一个LCT,然后我们只要把pushup写成功了就行。 那我们现在就不管LCT了,就单纯想用一棵二叉查找树怎么维护。分母是好搞的,分子我们要想点办法。 考虑右子树对左子树的贡献,我们假设处理出一个 L [ k ] L[k] L[k] 表示左子树中每个值乘以左边界的可选数量,我们现在再乘上右子树的大

SCI论文贡献写法

Arindam Dey: Conceptualization, Methodology, Formal analysis, Resources, Data curation, Supervision, Writing – original draft, Writing – review & editing, Project administration. Amit Barde: Writing –

CV-CNN-2015:GoogleNet-V3【贡献:卷积核分解(Factorization)减少参数量,比如将7x7分解成两个一维的卷积(1x7,7x1)】【避免表达瓶颈,更深】

Inception V3一个最重要的改进是分解(Factorization),将7x7分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),这样的好处,既可以加速计算,又可以将1个卷积拆成2个卷积,使得网络深度进一步增加,增加了网络的非线性(每增加一层都要进行ReLU)。 另外,网络输入从224x224变为了299x299。 参考资料: CNN模型合集 | 7

NumPyro入门API和开发人员参考 pyro分布推理效果处理程序贡献代码更改日志入门教程使用NumPyro的贝叶斯回归贝叶斯分层线性回归例

NumPyro文档¶ NumPyro入门 API和开发人员参考 烟火元素分布推理效果处理程序贡献代码更改日志 入门教程 使用NumPyro的贝叶斯回归 贝叶斯分层线性回归 例如:棒球击球率 示例:变型自动编码器 例子:尼尔的漏斗 例子:随机波动 例如:亚麻和俳句 可变推断参数化 NumPyro模型的自动绘制

【Git之窗】(二)记我为“Arquillian”开源框架贡献一次源码的经历

在上一家公司工作的时候,组长说,以后找工作简历上写,我为“xxx”开源项目贡献过源码,那你就NB了,恰巧今天我就干了这样一件事情。 一、 起源:     前几天我的好朋友文彬说研究下EJB的单元测试吧,因为“EJB3Unit”对我们itoo的"vo"支持的不是很好,于是给了我一些资料,以这个“Arquillian”框架为主,“http://arquillian.org/invasi

棱镜七彩荣获CNNVD两项大奖,专业能力与贡献再获认可!

6月18日,国家信息安全漏洞库(CNNVD)2023年度工作总结暨优秀表彰大会在中国信息安全测评中心成功举办。棱镜七彩凭借在漏洞方面的突出贡献和出色表现,被授予“2023年度优秀技术支撑单位”与“2023年度最佳新秀奖”。 优秀技术支撑单位是国家信息安全漏洞库依据2023年度报送高质量原创漏洞、漏洞预警支撑数据,从众多企业中选取前20名进行表彰。棱镜七彩作为CNNVD一级技术支撑单位之一

高性能网络SIG月度动态:自研 IPPROTO_SMC 贡献 Linux 社区,virtio 增加多项优化

高性能网络 SIG(Special Interest Group) :在这个万物互联的时代,云上的网络通信效率对各种服务至关重要,高性能网络兴趣组致力于利用 XDP、RDMA、VIRTIO 等新高效通信技术,结合软硬件一体化的思想,打造高性能网络协议栈,提升云计算时代数据中心应用的网络性能。 一、整体进展 本月高性能网络 SIG 的主要工作聚焦在 ANCK virtio 以及 SMC 上。

GIT贡献统计

统计某人的代码提交量,包括增加,删除: [plain] view plain copy git log –author=”$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf “added lines

探索软件工程师在新能源汽车研发中的角色与贡献

随着全球对可持续发展的关注不断增加,新能源汽车的研发与应用成为了汽车行业的一个重要方向。作为软件工程师,参与新能源汽车研发不仅能够推动科技创新,还能为环保事业贡献力量。本文将深入探讨软件工程师在新能源汽车研发中的具体贡献、所需的技能与注意事项,以及成为一名新能源汽车研发软件工程师的路径和未来发展方向。 1. 软件工程师在新能源汽车研发中的贡献 在新能源汽车研发中,软件工程师发挥着至关重要的