Conda与conda-forge:跨平台科学计算环境管理
请介绍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的依赖性求解慢问题