Ch02 Python与数据科学修订于 二〇二六年七月二日

2.1 pip 与 conda:包管理工具对比

2.1.1 概念:包管理器是什么

在开始写 Python 代码之前,你必然会遇到一个问题:怎么安装那些别人写好的库?

想象你要装修一套房子。你可以自己去木材市场挑木板、去五金店买螺丝、去化工厂买油漆原料自己调配——这就是”从零写代码”。正常人不会这么干,你会直接去宜家买现成的家具,拿回家组装就行。Python 的包(package)就是别人写好的”现成家具”,而包管理器(package manager)就是帮你订货、送货、安装的工具。你只需要说”我要一个 NumPy”,包管理器就自动帮你下载、解压、放到正确的位置、配置好依赖关系。

Python 生态有两个主流的包管理器:pip 和 conda。它们都能装包,但设计哲学完全不同。pip 是 Python 官方自带的”快递员”,只负责送 Python 包。conda 是”全屋定制设计师”,不仅送包,还帮你管理 Python 本身、C 语言底层库、甚至 GPU 驱动——凡是你的 AI 项目依赖的东西,conda 都能管。

这个区别决定了你的选择:纯 Python 项目用 pip 就够了,但一旦涉及数据科学和深度学习,conda 能帮你省下大量折腾环境的时间 1。

2.1.2 教学:pip 和 conda 怎么用

pip:Python 官方的”快递员”

pip 随 Python 一起安装,不需要额外操作。打开终端,输入以下命令就能安装任何 PyPI(Python Package Index,Python 的官方包仓库)上的库:

pip install numpy          # 安装 NumPy
pip install pandas matplotlib  # 一次装多个
pip install --upgrade numpy    # 升级 NumPy 到最新版
pip uninstall numpy            # 卸载
pip list                       # 查看已安装的所有包

pip 的工作方式很简单:你去 PyPI 上”下单”,它帮你在当前 Python 环境里”卸货”。但它不管这个”货”和你已有的其他”家具”会不会冲突——比如包 A 要求 NumPy 1.x,包 B 要求 NumPy 2.x,pip 可能两个都装上,最后运行时报错。这叫依赖冲突(dependency conflict),是 pip 最大的软肋。

conda:全屋定制的”设计师”

conda 需要单独安装。推荐安装 Miniconda(精简版,只含 conda 命令行工具),而不是完整的 Anaconda(预装 250+ 库,占用 3GB 空间)。去 https://docs.anaconda.com/miniconda/ 下载安装。

# conda 基础命令
conda create -n myenv python=3.12  # 创建独立环境,指定 Python 版本
conda activate myenv               # 激活环境
conda install numpy pandas         # 安装包
conda install -c conda-forge jupyter  # 从 conda-forge 频道安装
conda list                         # 查看已安装的包
conda deactivate                   # 退出环境

conda 和 pip 最大的技术区别在于依赖解析方式 2:

  • pip 采用递归安装——来一个装一个,装到后面发现冲突已经晚了。
  • conda 采用SAT 求解器——把所有的包和它们的版本要求当做一道数学题,在安装之前就算出所有包都能和谐共处的版本组合。如果无解,它会直接告诉你”不可能”,而不是悄悄制造一个会在半夜爆炸的环境。

核心对比表

pipconda
来源Python 官方自带需单独安装(Miniconda/Anaconda)
管理范围只管 Python 包Python 包 + 非 Python 依赖(C 库、CUDA、系统工具)
安装来源PyPI(Python 官方仓库)conda 频道(conda-forge、anaconda 等)
依赖解析递归安装,可能冲突SAT 求解器,全局一致性保证
速度中等依赖解析较慢,但 mamba 替代品可解决
环境管理需配合 venv内置,且可管理不同 Python 版本
适用场景纯 Python 项目、Web 应用数据科学、深度学习、需要 GPU 的项目

2.1.3 注意事项:最常见的坑

规则一:不要混用 pip 和 conda 装同一个包。 这是新手最常见的错误。如果你用 conda 装了 NumPy,然后又用 pip 升级了 NumPy,conda 管理的其他依赖(如 SciPy、pandas)可能瞬间崩溃,因为它们依赖的底层 C 库版本对不上了 3。

正确的混合使用顺序是:先 conda 装底层库,再 pip 装纯 Python 包。

conda create -n myproject python=3.12
conda activate myproject
conda install numpy scipy pandas matplotlib  # conda 装底层库
pip install flask requests                    # pip 装纯 Python 包(放在最后)

规则二:永远不要往 base 环境(conda 默认环境)里装项目依赖。 把 base 当成工具箱,每个项目单独创建一个环境。这就像你不会把全家的衣服都堆在客厅沙发上——一个项目一个”房间”。

规则三:使用 channel_priority strict。 conda 的频道(channel)就像不同的超市。conda-forge 是一个社区维护的大型”超市”,包更新、更全。anaconda 默认频道是”官方超市”,有些包版本较旧。如果你同时从多个频道拿货,conda 的 SAT 求解器会算得很慢。设置严格优先级能大幅加速:

conda config --set channel_priority strict

2.1.4 关联:从包管理到环境管理

理解 pip 和 conda 的区别后,下一步自然的问题是:我怎么管理不同的项目环境?这就是 2.2 节 要解决的问题。简而言之:

  • 如果你用 conda,环境管理已经内置了(conda create)。
  • 如果你用 pip,需要用 venv(Python 自带)来创建隔离环境。
  • 2026 年的新趋势是 uv,一个用 Rust 重写的极速包管理器,同时替代 pip 和 venv,安装速度比 pip 快 10-100 倍。详见 2.2 节对比。

另外,包管理器的选择直接影响你在 2.9 节 中能否顺利跑通第一个 AI 程序。如果包没装对,import requests 直接报 ModuleNotFoundError。


← 上一节:章首 | 下一节:2.2 Python环境管理:venv vs conda vs poetry vs uv →

注释

  1. CodeGym, “Conda vs pip vs uv: The 2026 Decision Guide”, 2026, https://codegym.cc/groups/posts/python-conda-vs-pip-vs-uv ↩

  2. conda.org, “Conda and pip are two ecosystems, not just tools”, 2026, https://conda.org/blog/2026-05-07-conda-and-pip-ecosystems/ ↩

  3. Tencent Cloud Developer, “Conda 与 pip 使用指南:核心原则与避坑技巧”, 2026, https://grapecity.csdn.net/694ca4f4bf6b0e4b285e2f52.html ↩

关联5

知识图谱

局部图谱 · 点节点跳转