mcpField
C
conda-recipe

conda-recipe

github.com/delphine-l开发2262 次安装24 周前更新
代码仓库

关于 conda-recipe

conda-recipe 是面向 conda 与 Bioconda 配方编写和测试的技能,适用于维护软件包的开发者。它涵盖配方创建、校验、构建及常见故障排查,并强调遵循 Bioconda 规范。

主要功能

  1. 01创建和完善 conda 配方
  2. 02校验与 lint 配方
  3. 03本地及 Docker 构建
  4. 04测试软件包与依赖
  5. 05排查常见构建错误

适用场景

  1. 01为 Python 或生物信息学软件打包
  2. 02提交前检查 Bioconda 配方
  3. 03在本地或容器中测试构建
  4. 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:源代码压缩包的下载 URL
  • sha256:SHA256 校验和
  • git_url 和 git_rev:用于 Git 源
  • patches:需要时列出的补丁文件

构建部分:

  • number:构建编号(仅修改配方时递增)
  • noarch:适用时设为 python 或 generic
  • script:内联构建脚本或对 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 文件共享:

  1. 打开 Docker Desktop
  2. 前往“设置”→“资源”→“文件共享”
  3. 将 /opt 添加到共享目录列表
  4. 点击“应用并重启”

错误:跳过 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 构建流程:

  1. 下载或使用 bioconda 构建环境 Docker 镜像
  2. 将配方目录和构建缓存挂载到容器中
  3. 在 Linux 容器内运行 conda-build
  4. 可选择在独立容器中运行 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 依赖项的工具

帮助用户时

  1. 询问包的类型(Python、R、编译型等)
  2. 检查是否有可用的源代码(PyPI、GitHub、CRAN 等)
  3. 验证许可证兼容性
  4. 确认所有运行时依赖项
  5. 创建精简但完整的测试套件
  6. 遵循命名约定(小写、连字符)
  7. 构建前通过 lint 检查验证配方
  8. 测试已构建包的功能

始终优先保证正确性和可复现性,并遵循 bioconda 社区标准。

评论

支持 Markdown