1348 字
约 4 分钟
7
S10-B01 · Conda 是什么:包管理器与虚拟环境

适用读者:第一次在 Python 项目里遇到 ImportError、或者被"该装 Anaconda 还是 Miniconda"搞晕的人。
前置:S01-B02(JDK 与 JAVA_HOME,环境变量的通用心智)。
实测环境:Python 3.12.3 + venv(本机无 Conda,Conda 部分为官方文档口径,见 §6 标注)。
覆盖旧文:A-1409(Conda 是什么,15 点)。
覆盖扩展:E-S10-001(pip 与 conda 的边界)。
下一篇:S10-B02 · Conda 安装与换源。


1. 一句话结论

Conda 同时解决两件事:Python 包依赖,以及"包背后的非 Python 二进制"(C 库、编译工具、CUDA)。pip 只能做前者。

工具 解决什么 不解决什么
pyenv 装/切 Python 解释器版本 不隔离依赖
venv / virtualenv 隔离每个项目的包目录 不装解释器、不管非 Python 依赖
pip 从 PyPI 装 Python 包 装不了 C 库/编译器/CUDA
Conda 包 + 二进制依赖 + 环境隔离 + 解释器版本 不专属于 Python(也能装 R、Node 工具)

关键认知:pip install numpy 拿到的是预编译 wheel;但如果某个包装不上(没有对应平台的 wheel),你就需要先有编译器和 C 库——这正是 Conda 的领域。


2. 为什么 pip 有时不够(E-S10-001)

场景 pip 的困境 conda 的做法
包只有源码、需要编译 缺编译器/头文件 → 编译失败 提供预编译二进制
依赖 CUDA/cuDNN(深度学习) 要自己装驱动与运行库 conda install cudatoolkit
科学计算栈(numpy/scipy 等) wheel 覆盖多数平台,其余需编译 统一二进制分发
跨语言依赖(R、Node) 不管 同一环境可装

判据:

  • 纯 Python 包、有 wheel → pip 更轻、更新更快。
  • 需要二进制/CUDA/编译 → conda。
  • 两者混用:先 conda install 装二进制依赖,再 pip install 装纯 Python 包(顺序不要反,反了 conda 可能覆盖掉 pip 装的版本)。

3. 三个概念:环境、包、频道

概念 说明
environment(环境) 一个独立目录,含解释器 + 包;激活后 python 指向它
package(包) 预编译的 .conda/.tar.bz2,比 wheel 携带更多内容(含二进制)
channel(频道) 包的来源:defaults(Anaconda 官方)、conda-forge(社区,包最全)、国内镜像

Anaconda vs Miniconda:

Anaconda Miniconda
内容 Python + 数百个科学计算包 只有 conda + Python
体积 数 GB 几十 MB
适合 教学、一次性装齐 生产与日常开发(推荐)

结论:用 Miniconda,需要什么再装什么——这是"环境最小化"的基本纪律(与 S01-A01 的版本矩阵同源)。


4. 用一个可跑的实验理解"隔离"

本机没有 Conda,用 venv 演示"隔离"这个核心机制(实测):

$ python3 -m venv .venv && . .venv/bin/activate
$ python -V
Python 3.12.3
$ pip install -q "httpx==0.27.2"
$ python -c "import httpx; print(httpx.__version__)"
0.27.2
$ deactivate          # 退出后系统环境不受影响

这正是所有环境管理器共有的本质:把"装哪儿"从全局改成本地。

管理器 隔离机制
venv 独立目录 + 改 PATH
conda 独立目录 + 改 PATH + 独立二进制依赖
Docker 独立文件系统 + 命名空间(更彻底)

判据:venv 能解决"包冲突",但解决不了"系统库冲突"——后者要么 conda,要么容器。


5. 五个误区

误区 真相
"conda 是 Python 的包管理器" 它是通用包/环境管理器,只是 Python 生态用得最多
"有 pip 就不用 conda" 需要二进制/CUDA 时 pip 装不上
"Anaconda 比 Miniconda 好" Miniconda + 按需安装更可控、更省空间
"装了 conda 就不用 venv" 可以用,但团队混用两套会造成"环境来源不明"
"base 环境可以直接开发" base 是管理入口;开发一律新建环境

6. 本篇的口径说明

内容 口径
venv 隔离实验 实测(Python 3.12.3)
conda 命令与频道 官方文档口径(本机未装 Conda,未执行)
性能/体积数据 未实测,正文不写具体数字

7. 自检

  1. pyenv、venv、pip、conda 各自解决什么?用一句话分别说清。
  2. 什么情况下 pip install 会失败而 conda install 成功?
  3. 为什么建议用 Miniconda 而不是 Anaconda?
  4. conda 与 pip 混用时,顺序为什么重要?
  5. venv 解决不了的问题,conda 或容器能解决哪一部分?

8. 下一篇

S10-B02 · Conda 安装与换源:三平台 + 国内镜像

下一篇给三平台安装步骤、conda init 的作用("装完命令找不到"的头号原因)、以及 .condarc 换源的优先级规则。


本篇属于系列《S10 · Python 语言与环境》。旧文来源:A-1409;扩展点 E-S10-001。venv 隔离实验为 2026-11-05 实测;Conda 部分为官方文档口径。

S10-B01 · Conda 是什么:包管理器与虚拟环境
https://www.clxhxhhr.top/posts/5316/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。