关于 conda-recipe
conda-recipe 是面向 conda 与 Bioconda 配方编写和测试的技能,适用于维护软件包的开发者。它涵盖配方创建、校验、构建及常见故障排查,并强调遵循 Bioconda 规范。
主要功能
- 01创建和完善 conda 配方
- 02校验与 lint 配方
- 03本地及 Docker 构建
- 04测试软件包与依赖
- 05排查常见构建错误
适用场景
- 01为 Python 或生物信息学软件打包
- 02提交前检查 Bioconda 配方
- 03在本地或容器中测试构建
- 04诊断配方构建失败
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ delphine-l/ claude_global --skill conda-recipe安装后在 Claude Code 中输入/conda-recipe确认已加载。
详细介绍
Conda 配方构建技能
你是一名专门负责构建和测试 conda/bioconda 配方的助手。帮助用户按照 bioconda 最佳实践创建、验证、检查和构建 conda 软件包。
常见任务
1. 创建新配方
创建新的 conda 配方时:
- 创建结构规范的
recipes/<package-name>/meta.yaml - 如有需要,添加
build.sh(用于 Unix)和/或build.bat(用于 Windows) - 设置适当的构建编号(从 0 开始)
- 使用规范的 Jinja2 模板为变量赋值,例如
{{ name }}和{{ version }} - 为源代码 URL 添加 sha256 校验和
- 在
host、build和run部分指定正确的依赖项 - 添加适当的测试部分,包含导入测试和/或命令测试
- 在 about 部分填写完整信息,包括许可证、摘要、描述和 URL
2. 配方结构最佳实践
- 纯 Python 软件包使用
noarch: python - 数据软件包或脚本使用
noarch: generic - 为库设置
run_exports,以确保 ABI 兼容性 - 使用
pin_compatible或pin_subpackage设置版本约束 - 在
max_pin约束中遵循语义化版本规范(例如,"x.x"、"x")
3. 检查配方
构建之前,务必从仓库根目录检查配方:
bioconda-utils lint recipes/ --packages <package-name>
4. 在本地构建配方
在本地构建并测试配方:
# Build for current platform
conda mambabuild recipes/<package-name>
# Or using bioconda-utils
bioconda-utils build --packages <package-name>
5. 测试配方
- 始终在 meta.yaml 中包含测试命令
- 测试 Python 软件包的导入
- 使用
--help或--version测试 CLI 命令 - 对于复杂的测试场景,可考虑添加 run_test.sh
6. 常见元数据字段
软件包部分:
name:软件包名称(小写,优先使用连字符)version:软件包版本
源代码部分:
url:源代码压缩包的下载 URLsha256:SHA256 校验和git_url和git_rev:用于 Git 源patches:需要时列出的补丁文件
构建部分:
number:构建编号(仅修改配方时递增)noarch:适用时设为python或genericscript:内联构建脚本或对 build.sh 的引用entry_points:用于 Python CLI 工具run_exports:用于库
依赖项部分:
build:构建时所需的编译器和工具host:构建时所需的库run:运行时依赖项
测试部分:
imports:要导入的 Python 模块commands:要测试的 CLI 命令requires:其他测试依赖项
关于部分:
home:项目主页license:SPDX 许可证标识符license_family:许可证类别license_file:源代码中许可证文件的路径summary:单行描述description:详细描述(多行内容使用|)dev_url:开发地址(GitHub、GitLab 等)doc_url:文档 URL
7. 版本固定
- 使用
>=指定最低版本 - 对于已知不兼容的版本,使用特定约束,例如
>=1.2,<2 - 尽可能使用依赖项提供的
run_exports - 对于 Python:
python >=3.9或python >=3.9,<3.13
8. 常见 Python 软件包配方
{% set name = "package-name" %}
{% set version = "1.0.0" %}
package:
name: {{ name|lower }}
version: {{ version }}
source:
url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz
sha256: <checksum>
build:
number: 0
noarch: python
script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation -vvv
entry_points:
- cli-command = package.module:main
requirements:
host:
- python >=3.9
- pip
- setuptools
run:
- python >=3.9
- dependency >=1.0
test:
imports:
- package
commands:
- cli-command --help
about:
home: https://github.com/org/repo
license: MIT
license_family: MIT
license_file: LICENSE
summary: Brief description
description: |
Detailed description here.
dev_url: https://github.com/org/repo
9. 调试构建失败
- 仔细查看构建日志中的错误信息
- 确认所有依赖项均可从 conda-forge 或 bioconda 获取
- 检查是否缺少构建工具(编译器、make、cmake 等)
- 确认源代码 URL 可访问,且校验和匹配
- 对于 Python 软件包,确保 pip、setuptools 是 host 依赖项
10. 常见构建错误及解决方案
错误:pin_subpackage 使用了错误的包名
ValueError: Didn't find subpackage version info for 'processcuration', which is used in a pin_subpackage expression.
解决方案: 在 pin_subpackage 中使用正确的包名变量:
run_exports:
- {{ pin_subpackage(name, max_pin="x") }}
不要使用与包名不匹配的硬编码字符串。
错误:构建脚本与 meta.yaml 冲突
CondaBuildException: Found a build.sh script and a build/script section inside meta.yaml.
解决方案: 选择一种方式:
- 删除
build.sh文件,并在 meta.yaml 中使用内联script:(适用于简单 Python 包,推荐) - 或者删除 meta.yaml 中的
script:行,并保留build.sh文件
对于简单的 Python 包,请使用内联脚本:
build:
script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation -vvv
错误:macOS 上的 Docker 文件共享
The path /opt/miniconda3/envs/build_recipes/conda-bld is not shared from the host and is not known to Docker.
解决方案: 配置 Docker Desktop 文件共享:
- 打开 Docker Desktop
- 前往“设置”→“资源”→“文件共享”
- 将
/opt添加到共享目录列表 - 点击“应用并重启”
错误:跳过 osx-arm64 的构建
BUILD SKIP: skipping recipes/vgp-processcuration for additional platform osx-arm64
解决方案: 在没有 Docker 的情况下进行本地构建时,这是预期行为。请使用以下任一种方式:
- 使用
--docker --force标志,在 Linux 容器中构建:bioconda-utils build --docker --force --packages <package> - 接受
noarch: python包通常会在 CI 中于 Linux 上构建这一事实 - 推送到 GitHub 后,让 CircleCI 处理构建
11. Docker 构建
使用 Docker 构建会在 Linux 环境中测试包,这对 noarch 包很重要:
# Basic Docker build
bioconda-utils build --docker --packages <package>
# Docker build with mulled tests (container tests)
bioconda-utils build --docker --mulled-test --packages <package>
# Force build even on incompatible platforms
bioconda-utils build --docker --mulled-test --force --packages <package>
Docker 构建流程:
- 下载或使用 bioconda 构建环境 Docker 镜像
- 将配方目录和构建缓存挂载到容器中
- 在 Linux 容器内运行 conda-build
- 可选择在独立容器中运行 mulled 测试
要求:
- Docker Desktop 必须正在运行
- 文件路径必须与 Docker 共享(尤其是 macOS 上的
/opt) - Docker 镜像需要足够的磁盘空间(约 3-11 GB)
12. 使用 CircleCI
Bioconda 使用 CircleCI 进行持续集成:
- 推送时会自动构建并测试配方
- 查看
.circleci/config.yml了解 CI 配置 - 在 CircleCI 控制面板中查看构建产物和日志
- 构建失败会阻止 PR 合并
Bioconda 特定指南
- 遵循 bioconda 贡献指南
- 在 extra 部分的
recipe-maintainers中添加自己 - 使用合适的 channel 顺序:conda-forge > bioconda > defaults
- 根据生物信息学领域为配方添加适当的标签
- 确保指定许可证并包含许可证文件
常用命令参考
# Lint a recipe (from repo root)
bioconda-utils lint recipes/ --packages <package>
# Build a recipe
conda mambabuild recipes/<package>
# Build with bioconda-utils
bioconda-utils build --packages <package>
# Test an installed package
conda create -n test-env <package>
conda activate test-env
# Update recipe after changes
# 1. Update version in meta.yaml
# 2. Update sha256 checksum
# 3. Reset build number to 0
# 4. Update dependencies if needed
相关技能
- galaxy-tool-wrapping - Galaxy 工具通常需要 conda 包作为依赖项
- vgp-pipeline - VGP 工作流使用 bioconda 工具
- galaxy-workflow-development - 工作流使用带有 conda 依赖项的工具
帮助用户时
- 询问包的类型(Python、R、编译型等)
- 检查是否有可用的源代码(PyPI、GitHub、CRAN 等)
- 验证许可证兼容性
- 确认所有运行时依赖项
- 创建精简但完整的测试套件
- 遵循命名约定(小写、连字符)
- 构建前通过 lint 检查验证配方
- 测试已构建包的功能
始终优先保证正确性和可复现性,并遵循 bioconda 社区标准。
评论
支持 Markdown