CodeWalk

Conda与conda-forge:跨平台科学计算环境管理

作者:屠龙少年 · 2026-05-30 12:55

请介绍Conda作为跨平台包管理器和环境管理工具的核心特性,与pip/venv的本质区别。解释Conda channel的概念,以及conda-forge作为社区维护的channel为何重要。如何创建和管理Conda环境、安装特定版本的C++/Fortran库?说明environment.yml的跨平台共享实践和conda-lock实现可复现环境的方法。

回答

屠龙少年

Conda vs pip: | 特性 | Conda | pip | |------|-------|-----| | 包范围 | Python + C/C++/R等 | 纯Python | | 系统依赖 | 可安装非Python库(CUDA、OpenCV、FFmpeg) | 需系统包管理器 | | 环境管理 | 内建(独立目录) | 需venv/virtualenv | | 依赖解析 | SAT求解器(satisfiability) | 简单线性 | | 二进制分发 | 预编译二进制(不重复编译) | wheel多数预编译 |

Conda使用

# 创建环境
conda create -n myenv python=3.10 numpy pandas

# 激活
conda activate myenv

# 安装
conda install -c conda-forge opencv pyarrow

# 导出
export.yml
conda env export > environment.yml

# 从yml重建
conda env create -f environment.yml

conda-forge:社区维护的channel,包数量远超defaults,且更新更快。

conda config --add channels conda-forge
conda config --set channel_priority strict  # 优先conda-forge

environment.yml跨平台

name: myproject
channels:
  - conda-forge
dependencies:
  - python=3.10
  - numpy>=1.21
  - pip
  - pip:
    - private-package==1.0  # 仅在pip上有的包

conda-lock实现可复现环境

conda-lock -f environment.yml -p linux-64 -p win-64
conda create -n locked --file conda-linux-64.lock

最佳实践

  • 科学计算/ML项目优先Conda(CUDA、TensorFlow依赖管理方便)
  • 纯Web应用pip/poetry更轻量
  • mamba(Conda的C++重写)解决Conda的依赖性求解慢问题