Conda-Forge 速查表
版本unknown 更新日志2025-11-12 GitHubconda-forge/conda-forge.github.io
340px

🔄 迁移到 conda-forge >>>

⚠️ 首要注意:设置 conda-forge 为最高且严格优先级,避免与其他渠道混用

🚀 一键配置(推荐)

# 将 conda-forge 设为首选渠道并启用严格优先级
conda config --add channels conda-forge
conda config --set channel_priority strict

📦 开箱即用方案

  • 使用 MiniforgeMambaforge
  • 预置 conda-forge 为默认源
  • 内置更快的 mamba 求解器
  • 安装与环境求解更流畅

🚫 避免混用

  • 不要与 defaults 混用:导致 ABI 不兼容
  • 不要就地切换渠道:存在二进制库冲突风险
  • 不要跨渠道混装 GPU 栈:易出现依赖错配

✅ 安全迁移流程

  1. 列出当前环境包:conda list
  2. 创建新环境:conda create -n newenv python=3.11
  3. 从 conda-forge 安装包:conda install numpy pandas
  4. 测试验证功能
  5. 弃用旧环境

⚖️ 渠道优先级与冲突解决 >>>

🎯 严格优先级优势

  • 确保解析器优先选择 conda-forge 生态内统一固定的兼容包
  • 显著降低依赖冲突概率
  • 避免二进制 ABI 不匹配问题
  • 提高环境复现性

🔧 常见冲突场景

  • 动态库缺失ImportError: Library not loaded
  • 版本降级:长时间求解导致版本回退
  • 依赖不满足:跨渠道依赖关系冲突

💡 解决方案

# 检查包来源
conda list | grep numpy
# 输出示例:numpy 1.21.0 py39hecd8cb5_0 conda-forge

# 验证 channel_priority 设置
conda config --show channel_priority

🎨 平台与 GPU 建议

选择与平台匹配的构建变体,GPU 栈优先使用 conda-forge 内的成套方案

⚡ 解析器与性能优化 >>>

🚀 Mamba 解析器

  • 速度提升:比 conda 快 5-10 倍
  • 兼容性:命令语法与 conda 完全兼容
  • 稳定性:减少大环境求解失败率

📦 安装与使用

# 方式一:现有 conda 安装
conda install mamba -c conda-forge
mamba install numpy pandas

# 方式二:使用 Mambaforge(推荐)
# 下载安装后直接使用 mamba 命令

🔧 其他性能优化

# 启用并行下载
conda config --set download_threads 8

# 启用索引缓存
conda config --set use_index_cache true

# 保持 conda 自身更新
conda update conda

💡 使用建议

大型项目推荐使用 mamba,日常开发可保持 conda 更新以提高稳定性

🔧 基础配置 >>>

  • conda --version:检查 conda 版本(需 >=4.9)
  • conda update conda:更新 conda 到最新版本
  • conda config --add channels conda-forge:添加 conda-forge 频道
  • conda config --set channel_priority strict:启用严格频道优先级
  • conda config --set auto_activate_base false:关闭 base 自动激活

🌐 国内镜像配置

清华 TUNA 镜像

channels:
  - conda-forge
show_channel_urls: true
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

中科大 USTC 镜像

channels:
  - conda-forge
show_channel_urls: true
custom_channels:
  conda-forge: https://mirrors.ustc.edu.cn/anaconda/cloud

⚡ 一次性指定镜像(无需全局配置)

# 使用清华 TUNA 镜像单次安装
conda install requests -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/

# 使用南科大 SUSTech 镜像创建环境
mamba create -n ds-env python=3.9 -c https://mirrors.sustech.edu.cn/anaconda/pkgs/main/ -y

📦 Miniforge 安装器获取

🔧 使用建议

  • 推荐使用 Miniforge/Mambaforge,预置 conda-forge
  • 避免通过 Homebrew 安装 Miniforge
  • 建议优先使用 mamba 进行安装以提升速度
配置完成后日常安装无需每次加 -c conda-forge

🐍 与 pip 协作 >>>

💡 优先使用 conda 安装,仅对 conda-forge 生态外的包使用 pip

📋 推荐工作流程

  1. 先用 conda install 安装所有在 conda-forge 中可找到的包
  2. 仅对特定工具库或前沿包使用 pip install
  3. 将 pip 步骤作为环境配置的最后一步
  4. 记录所有 pip 安装的包便于重建

⚠️ 注意事项

  • 避免用 pip 升级 conda 管理的依赖
  • 避免让 pip 破坏依赖图与二进制兼容性
  • 优先使用 conda 安装 wheels 包而非源码编译

🔍 检查冲突

# 检查是否通过 pip 安装了 conda 可用的包
conda list | grep -E "(pip|conda-forge)"

# 示例安全的混合使用
conda install numpy scipy pandas  # conda-forge
pip install some-rare-tool        # 不在 conda-forge 中

📝 记录依赖

# 生成完整的依赖文件
conda env export > environment.yml
pip freeze > requirements.txt
分开记录便于追踪问题来源和环境重建

📦 环境管理 >>>

  • conda create --name myenv python=3.9:创建新环境
  • conda activate myenv:激活环境
  • conda deactivate:退出当前环境
  • conda env list:列出所有环境
  • conda env remove --name myenv:删除环境
  • conda env export > environment.yml:导出环境配置
使用独立环境避免包冲突,提高可重现性

📚 包管理 >>>

  • conda install numpy:从 conda-forge 安装包
  • conda install numpy=1.21.0:安装指定版本
  • conda update numpy:更新包到最新版本
  • conda search numpy:搜索可用版本
  • conda list:列出当前环境的包
  • conda remove numpy:卸载包

使用 mamba 加速

conda install mamba -c conda-forge
mamba install numpy  # 比 conda 快 5-10 倍
mamba 是 conda 的 C++ 实现版本,解析速度更快

🤝 贡献新包 >>>

步骤 1:生成配方

  • Python 包grayskull pypi --strict-conda-forge 包名
  • R 包:使用 conda_r_skeleton_helper
  • 其他:参考示例配方手动创建

步骤 2:提交到 staged-recipes

git clone https://github.com/conda-forge/staged-recipes.git
# 将配方放入 recipes/ 目录
# 创建 Pull Request

步骤 3:成为维护者

PR 合并后自动生成 feedstock,你将成为该包的维护者

🛠️ 维护包 >>>

更新包版本

  • 等待自动机器人创建更新 PR
  • 检查依赖变更,如有需要则修改
  • 直接推送到机器人分支或创建新 PR

重要原则

  • 包不可变:已发布的包不能修改或删除
  • 使用 Fork:更新时请 fork 到个人账户
  • 避免分支推送:不要直接在主仓库创建分支

处理损坏的包

# 在 meta.yaml 中添加
about:
  broken: true  # 标记为损坏
  broken_reason: "说明原因"
严格遵循维护流程,确保生态系统的稳定性

🏗️ 基础设施 >>>

核心仓库

  • staged-recipes:新包提交入口
  • conda-forge-pinning:全局依赖版本固定
  • conda-smithy:CI 配置管理工具
  • feedstock-arch:已归档的 feedstock

CI 构建服务

  • Azure Pipelines:主要构建平台
  • Travis CI:辅助构建
  • CircleCI:额外构建支持
  • AppVeyor:Windows 构建

架构支持

Linux x64、Windows x64、macOS x64(支持 Apple Silicon)

⚙️ conda-forge.yml >>>

基本配置

conda_forge_output_validation: true
azure:
  # Windows 构建
  win: true
  # macOS 构建
  osx: true
  # Linux 构建
  linux: true

测试配置

test:
  requires:
    - pytest
  source_files:
    - tests/

构建时选择器

build:
  number: 0
  # 跳过某些架构
  skip: true  # [py==310 and win]
配置文件控制 CI/CD 流程和构建选项

🔍 故障排除 >>>

常见问题

  • 包冲突:启用 strict channel priority
  • 安装慢:使用 mamba 替代 conda
  • 包缺失:提交新的 staged-recipes PR
  • 版本过旧:联系维护者或自己维护

获取帮助

  • Zulip 聊天conda-forge.zulipchat.com
  • GitHub Issues:在对应 feedstock 仓库提交
  • Stack Overflow:标签 conda-forge
# 检查包的来源
conda list | grep numpy
# 显示:numpy 1.21.0 py39hecd8cb5_0 conda-forge
遇到问题先检查频道优先级设置和包的来源

✅ 最佳实践 >>>

环境管理

  • 为每个项目创建独立环境
  • 使用 environment.yml 管理依赖
  • 定期清理不需要的环境和包

包使用

  • 优先使用 conda-forge 而非 pip
  • 指定版本号避免意外更新
  • 定期更新包到稳定版本

性能优化

# 启用并行下载
conda config --set download_threads 8
# 启用缓存
conda config --set use_index_cache true

贡献指南

从小处开始,可以先从更新现有包或修复文档开始

🔗 重要资源 >>>

官方资源

社区支持

  • Zulip 聊天室:实时交流
  • Discourse:深度讨论(已归档)
  • 邮件列表:历史问题查询

开发工具

grayskull(配方生成)、conda-smithy(CI 管理)、conda-build(包构建)

📌 固定依赖 >>>

全局固定包

  • 编译器:gcc、clang、msvc
  • 运行时:python、R、nodejs
  • 核心库:numpy、scipy、pandas
  • 构建工具:cmake、make

查看当前固定

# 在 conda-forge-pinning 仓库查看
# conda_build_config.yaml
python: 3.9.* *_cpython
numpy: 1.21.* *_cpython

请求新的固定

在 conda-forge-pinning 仓库提交 issue,说明固定原因和建议版本

🔧 MPI 配置 >>>

HPC 系统使用外部 MPI

  • 安装 dummy MPI 包:conda install "mpich=*=external_*"
  • 或:conda install "openmpi=*=external_*"
  • 设置环境变量指向系统 MPI

配置示例

# 在 .condarc 或环境变量中
export MPI_HOME=/usr/local/mpi
export LD_LIBRARY_PATH=$MPI_HOME/lib:$LD_LIBRARY_PATH

验证配置

mpirun --version
which mpirun  # 应指向系统版本
外部 MPI 避免与系统调度器冲突,提高 HPC 兼容性

📖 术语表 >>>

核心概念

  • Feedstock:包含配方的仓库,用于构建包
  • Recipe:meta.yaml 文件,定义包的构建方式
  • Staged-recipes:新包提交的暂存仓库
  • CI:持续集成,自动构建和测试包
  • Channel:包分发渠道,如 conda-forge
  • Pinning:固定特定包的版本以确保一致性

维护者角色

  • Maintainer:包的具体维护者
  • Core team:conda-forge 核心开发团队
  • Bot:自动化机器人,如 regro-cf-autotick-bot
理解术语有助于更好地参与 conda-forge 社区