Skip to content

Conda 环境管理

概述

Conda 是一个跨平台的包管理和环境管理系统,与 Python 原生的 venv 相比,conda 的优势在于:

  • 非 Python 包的依赖管理:可以安装任何语言的二进制包(如 R、Node.js 等)
  • 交叉平台兼容性:自动处理二进制依赖关系
  • 独立的包仓库:不依赖系统的 package manager

对比 Python 原生虚拟环境

功能Python venvConda
Python 包管理pippip / conda
非 Python 依赖
二进制包分发
环境隔离级别仅 Python包含所有依赖

创建环境

创建基本环境

bash
# 指定 Python 版本创建环境
conda create -n myenv python=3.10

# 创建环境并立即安装包
conda create -n myenv python=3.10 numpy pandas

# 指定完全相同的 Python 版本
conda create -n myenv python=3.10.0

从配置文件创建环境

bash
# 使用 environment.yml 文件创建环境
conda env create -f environment.yml

# 指定环境名称
conda env create -f environment.yml -n myenv

# 如果已存在则更新现有环境
conda env update -f environment.yml --prune

创建完整环境的 YAML 格式

yaml
name: myenv
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.10
  - numpy>=1.20.0
  - pandas
  - pip
  - pip:
      - requests==2.28.0
      - flask

激活与停用环境

激活环境

bash
# 激活环境
conda activate myenv

# macOS/Linux 可能需要先刷新 shell
source activate myenv

# Windows PowerShell
conda activate myenv

# Windows CMD
activate myenv

停用环境

bash
# 停用当前环境
conda deactivate

# 回到基础环境
conda deactivate

查看所有可用环境

bash
# 列出所有环境
conda env list

# 简写
conda info -e

# 只显示环境名称
conda info --envs

环境导出与导入

导出环境配置

bash
# 导出环境和所有依赖包版本到 YAML 文件
conda env export > environment.yml

# 只导出主依赖(不包含所有精确定义的版本)
conda env export --from-history > environment.yml

# 导出到指定文件
conda env export -n myenv > myenv.yml

从文件恢复环境

bash
# 从 YAML 文件创建新环境
conda env create -f environment.yml

# 从 URL 创建环境
conda env create -f https://example.com/environment.yml

# 更新现有环境
echo "" > environment.yml  # 清空现有环境
conda env update -f environment.yml --prune

包管理

安装包

bash
# 安装包
conda install -n myenv numpy

# 安装特定版本的包
conda install -n myenv numpy=1.21.0

# 同时安装多个包
conda install -n myenv numpy pandas scipy

# 从 pip 源安装
conda install -n myenv pip
pip install -n myenv some_package

# 或者在激活状态下使用 pip
conda activate myenv
pip install some_package

卸载包

bash
# 卸载包
conda remove -n myenv numpy

# 卸载多个包
conda remove -n myenv numpy pandas

# 清理未使用的依赖
conda clean --all

更新包

bash
# 更新单个包
conda install -n myenv --upgrade numpy

# 更新所有包
conda update --all

# 更新特定包
conda update numpy

# 仅更新到最新版
conda install --revision *numpy*

搜索包

bash
# 搜索包
conda search numpy

# 在所有频道搜索
conda search -c conda-forge numpy

# 查看包信息
conda info numpy

# 查看某版本包的详情
conda search numpy=1.21.0

通道(Channels)管理

配置通道

bash
# 列出当前配置的通道
conda config --show channels

# 添加通道
conda config --add channels conda-forge

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

推荐通道配置

bash
# 优化后的通道配置(按优先级排序)
conda config --add channels conda-forge
conda config --add channels bioconda
conda config --add channels menpo
conda config --set channel_priority strict

常见问题解决

环境冲突

bash
# 查看依赖树
conda graph myenv

# 查找冲突原因
conda install --dry-run numpy scipy  # 查看会安装的包

# 解决依赖冲突
conda install --solver=libmamba numpy scipy  # 使用新的求解器

安装包失败

bash
# 更新 conda 本身
conda update conda

# 使用宽松求解器
conda install --solver=classic numpy

# 从不同通道获取
conda install -c conda-forge numpy

清理缓存

bash
# 清理未使用的包
conda clean --packages

# 清理索引缓存
conda clean --index-cache

# 清理临时文件
conda clean --tarballs

# 清理所有缓存
conda clean --all

最佳实践

环境命名规范

bash
# 语义化命名
conda create -n py310-data-science python=3.10
conda create -n web-django python=3.9
conda create -n ml-torch python=3.10 pytorch torchvision

工作流示例

bash
# 完整的工作流程
# 1. 创建环境
conda create -n myproject python=3.10

# 2. 激活环境
conda activate myproject

# 3. 安装依赖
conda install numpy pandas matplotlib

# 4. 导出配置
conda env export > requirements.yml

# 5. 协作时共享
conda env create -f requirements.yml -n collaborator-env

# 6. 更新环境
conda install newpackage
conda env export > requirements.yml  # 重新导出

与 pip 配合使用

bash
# 推荐做法:优先使用 conda 安装基础科学包
conda install numpy pandas scipy

# 对于 conda 没有的包,使用 pip
conda install pip
pip install specific-package

# 或者一次性安装
conda create -n mixed python=3.10 numpy
pip install -r requirements.txt

性能优化

使用更快的求解器

bash
# 安装快速求解器
conda install -n base -c conda-forge mamba

# 使用 mamba 替代 conda(更快更智能)
mamba create -n myenv python=3.10
mamba install -n myenv numpy pandas
mamba update --all

环境变量配置

bash
# 设置镜像源(加速下载)
# Linux/macOS: ~/.condarc
# Windows: %USERPROFILE%\.condarc

# 添加国内镜像(可选)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --set show_channel_urls yes

进阶技巧

克隆环境

bash
# 克隆整个环境
conda create -n newenv --clone oldenv

# 克隆时排除某些包
conda create -n newenv --clone oldenv \
    --override-base-channels \
    -n newenv python=3.11

导出可执行文件

bash
# 将环境打包为独立应用
conda-pack -n myenv -o myenv.tar.gz

# 在其他机器解压使用
tar xzf myenv.tar.gz

批量管理

bash
# 批量激活/停用脚本
# 在 project.sh 中添加
PROJECT_ENVS="proj1 proj2 proj3"
for env in $PROJECT_ENVS; do
  if ! conda deactivate 2>/dev/null; then
    echo "No environment to deactivate"
  fi
done
conda activate $1

相关资源

最近更新