🔄 迁移到 conda-forge >>>
⚠️ 首要注意:设置 conda-forge 为最高且严格优先级,避免与其他渠道混用
🚀 一键配置(推荐)
# 将 conda-forge 设为首选渠道并启用严格优先级
conda config --add channels conda-forge
conda config --set channel_priority strict
📦 开箱即用方案
- 使用 Miniforge 或 Mambaforge
- 预置 conda-forge 为默认源
- 内置更快的
mamba 求解器
- 安装与环境求解更流畅
🚫 避免混用
- 不要与 defaults 混用:导致 ABI 不兼容
- 不要就地切换渠道:存在二进制库冲突风险
- 不要跨渠道混装 GPU 栈:易出现依赖错配
✅ 安全迁移流程
- 列出当前环境包:
conda list
- 创建新环境:
conda create -n newenv python=3.11
- 从 conda-forge 安装包:
conda install numpy pandas
- 测试验证功能
- 弃用旧环境
⚖️ 渠道优先级与冲突解决 >>>
🎯 严格优先级优势
- 确保解析器优先选择 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
📋 推荐工作流程
- 先用
conda install 安装所有在 conda-forge 中可找到的包
- 仅对特定工具库或前沿包使用
pip install
- 将 pip 步骤作为环境配置的最后一步
- 记录所有 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:生成配方
步骤 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
- 版本过旧:联系维护者或自己维护
获取帮助
# 检查包的来源
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 社区