跳转至

10.2 第三方库与虚拟环境——包管理系统

内容梗概

本节从"为什么可以用 pip install 安装第三方库"这个问题出发,把 pip 归纳为计算机领域一个通行的设计——包管理系统,并类比 Linux 的 apt、Windows 的 Chocolatey 等同类工具。随后逐步拆解了 pip install 包名 背后的完整流程:创建临时目录、访问索引服务器查询包信息、检查本地缓存、从文件服务器下载 whl 文件、递归解析并安装依赖。中间穿插讲解了 Windows 环境变量(%TEMP%、%APPDATA%)的使用小技巧,并点出依赖安装顺序与数据结构中的栈思想相通。

知识点详解

1. 包管理系统的普遍性(约 00:00–02:27)

  • pip install 是一个非常典型的**包管理系统**(Package Management System),类似设计在计算机领域很常见。
  • Linux:如 Ubuntu 下用管理员权限执行 apt install 软件名 装软件;软件升级时只需 apt update + apt upgrade 即可更新到最新版本。相比 Windows"下载安装包→双击→下一步、下一步"的方式非常方便。
  • Windows 上也有命令行包管理工具,如上学期《计算机安全与维护》课介绍过的 Chocolatey(巧克利)。
  • 结论:包管理系统是一种很通行的设计。

2. pip install 背后发生了什么(约 02:27–06:15)

按顺序逐步拆解: 1. 创建临时目录:在临时文件夹(%TEMP% 环境变量对应的目录)中创建目录,存放安装过程中产生的临时文件。 2. 访问索引服务器(index server):通过特定连接,用包名去索引服务器上查询能否找到这个包;找到后返回服务器上有哪些版本、包的具体信息(名称、作者等)及下载链接。 3. 检查缓存:在 %APPDATA% 下的 pip cache 目录中查找是否已有缓存。若有缓存,安装时会提示 Using cached ...,直接使用缓存文件而不再下载,避免浪费带宽。 4. 从文件服务器下载:注意这里是**分离设计**——软件的信息(info)和软件文件本身(file)分开存放在不同服务器上。没有缓存时去文件服务器下载 whl 文件(其格式和用法在 10.4 介绍)。 5. 检查并安装依赖:若包 A 的源码里 import 了 B 和 C,则必须先装 B、C 才能正常用 A;pip 会递归分析依赖(B 若还依赖别的,继续往下查),直到所有依赖都满足,然后按先后顺序安装。

3. 依赖安装顺序与栈结构(约 06:15–07:08)

  • 例:要装 A,A 依赖 B、C;C 又依赖 D;D 依赖 E。下载齐全后,安装顺序是反过来的——先装 E,再 D、C、B,最后装 A。
  • 这与函数调用的逻辑、数据结构中的**栈**(后进先出)结构相通。老师借此强调"很多思想都是相通的"。

4. 环境变量小技巧(约 07:08–08:21)

  • Windows 资源管理器地址栏可直接输入环境变量并回车自动展开,如输入 %AppData% 直接跳转到对应路径(老师机器上即 AppData 目录),其中应有 pip 缓存文件夹。
  • % 包起来的都是环境变量名;以后看到网上文章让你修改该目录内容时,就知道直接用这个方式定位,不必手动逐级查找。

示例与演示

  • 在资源管理器地址栏输入 %AppData% 回车,现场展示环境变量自动展开为实际路径(因老师机器未装过对应内容,pip 缓存目录未找到,仅演示定位方法)。
  • 回忆上一小节装 requests 时命令行出现的 Using cached ... 提示,印证缓存机制。

重点与难点

  • 理解 pip 的**索引服务器 / 文件服务器分离**架构,这是后续理解"为什么改了镜像源才会快"(10.3)的基础。
  • 缓存机制:Using cached 表示直接复用本地缓存,不会重新下载。
  • 依赖递归解析与逆序安装:思想与栈结构一致,是本节的理论要点。
  • Windows 环境变量(%TEMP%、%APPDATA%)的概念与快捷访问方式。

关联内容

  • 承接 10.1 的 pip install requests 基本用法,解释其内部机制。
  • 引出 10.3 国内镜像源(索引/文件服务器在境外导致慢,需换源)。
  • 引出 10.4 的 whl 文件格式(下载的就是 whl)。
  • 类比上学期《计算机安全与维护》课的 Chocolatey;与数据结构课程中的栈思想呼应。