Conda 环境管理
概述
Conda 是一个跨平台的包管理和环境管理系统,与 Python 原生的 venv 相比,conda 的优势在于:
- 非 Python 包的依赖管理:可以安装任何语言的二进制包(如 R、Node.js 等)
- 交叉平台兼容性:自动处理二进制依赖关系
- 独立的包仓库:不依赖系统的 package manager
对比 Python 原生虚拟环境
| 功能 | Python venv | Conda |
|---|---|---|
| Python 包管理 | pip | pip / 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