当前位置: 首页 > news >正文

conda使用详细指南

Conda 实战指南(偏详细版)

0. 总体认识:conda 究竟解决什么问题?

一句话:

conda = 环境管理器(虚拟环境) + 包管理器(跨语言包),解决“依赖地狱 + 环境冲突”。

和你已经熟悉的工具对比:

  • apt:系统级包管理,主要装系统软件和 C/C++ 库
  • pip:Python 包管理,只针对 Python,依赖解析相对薄弱
  • conda:
    • 可以同时管理:Python/R/Julia + C 库 + 各种工具(git、ffmpeg 等)
    • 自带虚拟环境概念(多套 Python 共存、互不干扰)
    • 尽量通过预编译二进制包,减轻“编译失败”“缺少系统库”的痛苦

你可以把每个 conda 环境想成是:

一个轻量的“用户级小系统”(有自己的 Python、库、Python 包等)。


1. 安装与基础配置

1.1 安装方式选择

常见三种:

  1. Anaconda

    • 带一大堆科学计算包(numpy、pandas、jupyter 等)
    • 适合“我要一键装齐数据科学环境”,但体积大
  2. Miniconda(推荐)

    • 只带 Python + conda,不预装第三方库
    • 适合希望“从零按需装包”的用户
  3. (Mamba)Mambaforge / Miniforge

    • 自带更快的求解器mamba,默认用conda-forge
    • 对包更新速度要求高、对性能敏感时非常适合

如果你不确定,首选 Miniconda 或 Mambaforge

1.2 环境变量与初始化

安装完成后,一般会提示你运行类似:

# Linux / macOSconda initbash# 或 zsh/fish 等

这一步作用:

  • 修改你的 shell 配置(如~/.bashrc),在启动终端时自动注入 conda 的 hook
  • 以便你可以直接用conda activate xxx,而不用手工搞 PATH

确认是否成功:

conda --version

能输出版本号就说明 PATH 和 shell 初始化没问题。


2. 环境管理:把「环境」当作核心资产

2.1 创建环境

通用命令:

conda create -n<环境名>[包1 包2...][python=版本]

示例:

# 创建一个 Python 3.11 的干净环境conda create -n py311python=3.11# 数据科学环境,顺便装几个包conda create -n dspython=3.11numpy pandas matplotlib scikit-learn jupyterlab

要点:

  • 不指定 python 时,会用默认版本(通常是安装时的主版本)
  • 推荐每个项目一个环境,名字易懂,如web-fastapi,ml-nlp,tf-2.15

2.2 激活 / 退出环境

# 激活conda activate ds# 当前 shell 前缀会变成 (ds)# 此时 python/pip/conda 都是该环境下的# 离开环境(回到上一个)conda deactivate

你可以嵌套使用:

  • 如果当前在proj1环境,conda activate proj2会直接切换到 proj2
  • conda deactivate会回到系统默认(通常是 base)

2.3 查看 / 删除环境

# 查看所有环境condaenvlist# 或conda info --envs

删除:

conda remove -n ds --all

--all表示把整个环境删掉(目录 + 包)。

2.4 环境存放位置

默认位置通常在:

<conda安装目录>/envs/<环境名>

如:

/home/user/miniconda3/envs/ds C:\Users\xxx\miniconda3\envs\ds

你可以通过:

condaenvlist

来查看每个环境完整路径。


3. 包管理:conda install / update / remove / list / search

3.1 安装包(核心命令)

# 先进入环境conda activate ds# 安装单个包condainstallnumpy# 安装多个包condainstallnumpy pandas scipy# 指定版本condainstallnumpy=1.26# 提前预览(不真正安装)condainstallnumpy --dry-run

背后做的事情:

  1. 读取当前环境已有的包和版本
  2. 从配置的 channels 中查找满足条件的版本
  3. 给出“计划变更”:要装什么、哪些会升级/降级
  4. 让你确认Proceed ([y]/n)?

3.2 升级包 / 升级环境

# 升级指定包conda update numpy# 升级所有包(慎用在生产环境)conda update --all

updateinstall最新可用版本,conda 会尽力保持环境内依赖不冲突。

3.3 卸载包

conda remove numpy conda remove numpy pandas

如果其他包依赖被删的包,conda 会给你提示需要移除/变更哪些。

3.4 查看已安装包:conda list

conda list conda list numpy

重要信息:

  • 包名 / 版本号
  • build string
  • 来自哪个 channel(如conda-forgedefaults

3.5 搜索包:conda search

conda search numpy conda search"numpy>=1.21"
  • 能看到可用版本及其 channel
  • 对于只想看“有没有这个包”时非常有用

补充:更多时候你会使用网页搜索(Anaconda.org / conda-forge),信息更全。


4. 通道(channels):就像 apt 源 + pip 源 混合体

4.1 概念

  • channel = 包仓库(源)
  • 安装包时,conda 会按照 channel 优先级依次查找
  • 常见 channel:
    • defaults:Anaconda 官方
    • conda-forge:社区维护,更新很快,包超多

4.2 查看当前 channel 配置

conda config --show channels

4.3 修改 channel 优先级(推荐做法)

典型推荐配置:

conda config--add channels conda-forge conda config --set channel_priority strict

含义:

  • conda-forge加入 channels
  • 启用“严格优先级”:
    优先使用位于列表前面的 channel,避免不同 channel 混装导致的 ABI 问题

.condarc中大致会变成:

channels:-conda-forge-defaultschannel_priority:strict

4.4 临时指定 channel

condainstall-c conda-forge matplotlib

这只影响本次安装。

4.5 国内镜像加速(如你在国内)

示例(以清华为例,具体以镜像站说明为准):

# ~/.condarcchannels:-https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main-https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r-https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2-conda-forge-defaultsshow_channel_urls:true

设置完后:

conda clean -i# 清理索引缓存,强制重新用新源

5. conda 与 pip 的正确“配合姿势”

5.1 核心原则(再强调一次)

在 conda 环境内:
能用 conda 装的就用 conda
conda 仓库里没有的,再用pip install

原因:

  • conda 自己管理一整套二进制栈(Python + 底层 C/Fortran 库)
  • pip install -U 某底层包可能会升级出一个 conda 未知的版本,破坏 ABI 兼容

5.2 标准流程示范

conda create -n projpython=3.11conda activate proj# 1. 尽量用 conda 装condainstallnumpy pandas scipy matplotlib# 2. conda 没有的,用 pippipinstallsome-rare-pypi-only-package

建议:

  • 尽量不要用 pip 去升级那些 conda 装的核心库,如:
    • numpy, scipy, pytorch, tensorflow, openssl 等
  • 如果你确实要用 pip 升级这些核心包,思路最好是:
    单独搞一个“pip-only 环境”(只用 pip,不用 conda 管包)

5.3 如何区分一个包是哪个工具装的?

conda listchannel字段能看出:

  • pypipypi_0,通常表示通过 pip 安装记录的
  • 其他(如conda-forgedefaults),是 conda 自己装的

6. 环境导出与迁移:environment.yml

对应 pip 的requirements.txt,conda 使用environment.yml来描述“环境完整快照”。

6.1 导出环境

在目标环境中:

conda activate proj condaenvexport>environment.yml

生成的大致如下:

name:projchannels:-conda-forge-defaultsdependencies:-python=3.11-numpy=1.26.4-pandas=2.1.4-pip-pip:-some-rare-pypi-only-package==0.3.1

要点:

  • 记录了:
    • 环境名
    • 使用的 channels
    • 所有 conda 包 + 版本
    • pip 包列表

6.2 用 environment.yml 重建环境

在另一台机器 / 另一个账号:

condaenvcreate -f environment.yml
  • 会自动创建一个名为proj的环境(如文件里的name
  • 想换名:
condaenvcreate -f environment.yml -n proj2

6.3 “精简版”导出

有时你不想锁死所有子依赖,只希望导出“顶层依赖”(类似手写 requirements.txt)。
可以手动删掉environment.yml里很多行,只保留自己关心的包 + 通道。
或者手动写一个简化版 yml,例如:

name:projchannels:-conda-forgedependencies:-python=3.11-numpy-pandas-pip-pip:-some-rare-pypi-only-package

更利于在不同平台重建时有更大的自由度。


7. 进阶:多 Python / 多语言、C 库与工具

7.1 多个 Python 版本共存

conda create -n py38python=3.8conda create -n py39python=3.9conda create -n py311python=3.11

激活不同环境,就能轻松在 3.8 / 3.9 / 3.11 之间切换,而不动系统 Python。

7.2 管理非 Python 语言/工具

conda 能装的不只是 Python 包,例如:

condainstall-c conda-forge cmake condainstall-c conda-forge ffmpeg condainstall-c conda-forgegit

R/julia 之类也可以(多数在 conda-forge 上有)。

这使得你可以用一个 conda 环境,统一打包:

  • Python + 依赖
  • 编译工具链
  • 系统级库(如libxml2,openssl等)

更适合作为“项目级运行时环境”。


8. 常见问题与排查思路

8.1 环境损坏 / 某些包 ImportError

现象:

  • 某个 import 报错:找不到动态库 / symbol not found
  • 很可能是 pip + conda 混用导致 ABI 不兼容

排查思路:

  1. conda list看看该包来自哪(conda-forge? pypi?)
  2. 如果是 pip 装在 conda 环境里的关键底层包(如 numpy, scipy),
    可能是该 pip 版本不兼容当前环境里的底层库
  3. 成本最低的方案:
    • 备份environment.yml
    • 新建一个干净环境,按“先 conda 后 pip”原则重新创建

8.2 求解速度慢

原因:

  • 包多、channel 多
  • 旧版 conda 依赖求解器慢

解决办法:

  1. 升级 conda:

    conda update conda
  2. 或者安装mamba,使用 mamba 来代替部分命令:

    condainstall-n base mamba -c conda-forge# 之后你可以这样用(几乎同语法)mambainstallnumpy pandas mamba create -n fastenvpython=3.11numpy

mamba 兼容大部分 conda 命令,用它装包明显更快。

8.3 base 环境过于混乱

常见坏习惯:

  • 所有东西都往base里装,一两年之后 base 环境变成“垃圾场”。

建议:

  • 把 base 当成“系统管理环境”,只做:
    • 更新 conda / mamba
    • 创建/删除环境
  • 项目依赖一律新建环境,不往 base 塞东西

如果 base 已经很乱:

  • 如果没有硬性依赖,可以考虑直接重装 Miniconda(最干净)
  • 或者新装一份 Miniconda/Mambaforge 到另一个路径,用新的那份 conda 管今后的项目

9. 命令速查:适合贴在桌边的小抄

9.1 环境

# 创建环境conda create -n myenvpython=3.11conda create -n dspython=3.11numpy pandas jupyterlab# 激活 / 退出conda activate myenv conda deactivate# 查看所有环境condaenvlist conda info --envs# 删除环境conda remove -n myenv --all

9.2 包管理

# 安装condainstallnumpy condainstallnumpy pandas condainstallnumpy=1.26# 指定 channelcondainstall-c conda-forge numpy# 升级conda update numpy conda update --all# 卸载conda remove numpy# 查看包conda list conda list numpy# 搜索包conda search numpy

9.3 环境导出 / 迁移

# 导出conda activate myenv condaenvexport>environment.yml# 从 yml 创建condaenvcreate -f environment.yml condaenvcreate -f environment.yml -n newname

9.4 配置 channels

# 查看 channelsconda config --show channels# 添加 conda-forge 并启用严格优先conda config --add channels conda-forge conda config --set channel_priority strict
http://www.cnnetsun.cn/news/53489.html

相关文章:

  • 豆包与DeepSeek底层大模型的深度解析:技术架构、设计理念与生态分野
  • Linux系统中的socket激活:先创建监听端口,后启动程序
  • 从零解决pyproject.toml构建失败的实战指南
  • Redis Lua脚本入门:从零写出你的第一个原子操作
  • 旧机转手不再慌!电子产品信息清除新国标落地,核心技术逻辑全解析
  • 安全体验馆好用供应商
  • 第二章——数据分析场景之Python数据可视化:用Matplotlib与Seaborn绘制洞察之图
  • 【Java毕设全套源码+文档】基于springboot的高校毕业生离校管理系统小程序设计与实现(丰富项目+远程调试+讲解+定制)
  • 如何用AI工具jstat优化Java应用性能分析
  • 【Java毕设全套源码+文档】基于springboot的高校毕业生信息管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • Day 38 GPU训练及类的call方法
  • 【Python实战】火爆全网的“隔空手势画板”是如何实现的?教你用OpenCV+MediaPipe复刻钢铁侠黑科技!
  • 【学习笔记】如果打造可复现、可评测、可迭代的AI技术体系
  • 【论文自动阅读】See Once, Then Act: Vision-Language-Action Model with Task Learning from One-Shot Video Demo
  • 利用齐次坐标系证明各种几何定理【射影几何】
  • 小程序基于springboot的乡镇普法知识科普宣传系统 律师预约系统设计与实现_qf4cwws6(java毕业设计项目源码)
  • 面向对象编程三大特性:封装、继承、多态的核心要义
  • leetcode 2147. 分隔长廊的方案数 困难
  • 学生党必备!这款桌面课表工具太省心了
  • 深度学习实验14代码
  • 优化及性能-–-behaviac
  • 练题100天——DAY26:汇总区间+丢失的数字+数组交集
  • 当AI芯片不再性感:博通的高增长,为何成了催命符?
  • Vibe Coding:AI驱动的编程新范式
  • AI 数字孪生工厂:西门子与中信特钢的实践,如何降本 11%?
  • Spring IoC的实现机制是什么?
  • 耐用折叠屏手机推荐:三星Galaxy Z TriFold如何破解“折痕与耐用”难题?
  • 前端技术风险防控:以防为主,防控结合
  • 给女神发“在吗”,她回了个表情包是几个意思?—— 硬核探讨TCP 三次握手
  • 入门大模型必知的100个基础问题(附简明答案)