跳转至

10.4 第三方库与虚拟环境——离线安装与 whl 文件

内容梗概

本节讲 pip 的离线安装方式:在无法联网的机器上,只需拷贝 whl 文件到本机再 pip install 即可。老师介绍了 whl 文件的三种类型(通用纯 Python、纯 Python、平台相关),并用 pip install dlib 编译失败的实例详细解释了为什么含 C/C++ 代码的包在 Windows 上安装容易失败(需要 cmake、VS 编译环境),以及平台相关 whl 如何规避编译。接着讲解了 whl 文件名的组成规则(不能改名),推荐了下载预编译 whl 的网站,最后说明第三方包的安装路径 Lib/site-packages 并对本章前半部分做了总结。

知识点详解

1. 离线安装的思路(约 00:00–00:58)

  • 场景:服务器或本机完全不能上网,改镜像源也没用。
  • 回忆 pip install 的内部过程:本质是**下载 whl 文件再安装**。所以离线时用 U 盘等方式拷一个 whl 文件到目标机器,直接 pip install 文件名 即可。

2. whl 文件是什么(约 00:58–01:26)

  • whl(wheel)是针对 Python 第三方库专门设计的**安装程序格式**,有官方文档描述其文件格式(与日常使用关系不大,感兴趣可自行查阅)。

3. whl 的三种类型(约 01:26–02:20)

  1. 通用(universal):同时支持 Python 2 和 Python 3,内容是纯 Python 的包。
  2. 纯 Python(pure Python):也是纯 Python 内容,但只针对 Python 2 或 Python 3 之一,不能同时支持。
  3. 平台相关(platform):非纯 Python 包,包含编译后的平台相关文件。

4. 为什么需要平台相关的 whl——dlib 案例(约 02:20–06:48)

  • whl 实际是一个**压缩包**,解压后是一堆文件;若全是 Python 写成就是纯 Python 包。
  • 但很多包(如换脸用的 dlib)内部还包含 C/C++ 源代码(.c、.h、.cpp),因为它依赖 OpenCV 等由 C/C++ 编写的图像库。
  • 安装这类包时,pip 会在你的机器上**现场编译**这些源代码,因此需要编译工具链:
  • 报错中提示找不到 cmake(编译工具);装了 cmake 后还要求 VS2015 编译环境……一环扣一环的依赖链,全部装齐非常费劲。
  • 平台相关 whl 则把编译好的结果直接打包,安装时无需编译、无需装编译工具——"美滋滋"。
  • 代价是**移植性差**:同一份源代码在不同操作系统(Windows/Linux/Mac、不同位数)上编译结果不同且不能互相通用,所以编译好的包必然与平台相关。

5. whl 文件命名规则——不要改名!(约 07:08–12:36)

  • 离线安装方法:pip install <完整whl文件名>(空格后跟完整文件名)。
  • whl 文件绝对不能改名:很多人嫌文件名太长改成 A.whl,结果 pip 报错不让装——pip 会根据文件名解析包的相关信息;改名后若忘了原名就"白给"了。
  • 文件名组成(以 - 分隔的各段):
  • 包名(如 requests)
  • 版本号(如 1.0)
  • build tag(编译版本)
  • Python 版本(如 py3、cp38)
  • ABI 版本(哪个解释器用的,如 CPython 3.8 对应 cp38)
  • 平台(Platform):win32 表示 Windows,any 表示所有平台通用

6. 预编译 whl 下载网站(约 12:36–16:06)

  • 老师推荐了一个收录"热心高校人士"编译好的大量 Windows 平台 whl 文件的网站(课上以页面链接形式给出,即广为流传的 Christoph Gohlke 非官方 whl 合集)。
  • 使用方法:打开页面后用浏览器 Ctrl+F 搜索包名(如 dlib、opencv),找到对应版本下载。
  • 文件名解读示例:opencv_python-4.1.2+contrib-cp37-cp37m-win_amd64.whl
  • opencv-python:包名;4.1.2:版本;contrib:额外版本内容;
  • cp37:CPython 3.7;cp37m:ABI tag;
  • win_amd64:64 位 Windows(对应 64 位 Python);win32 则对应 32 位 Python。
  • 适用场景:安装某包时因编译出错、提示安装编译工具,而你不想为此装一堆用不上的编译环境——就去该网站下载对应 whl 再 pip install。
  • 补充:dlib 包含机器学习/人脸识别相关库;OpenCV 用于图像处理。

7. 包的安装路径与本章小结(约 16:06–18:35)

  • pip install 装的包放在 Python 安装目录下的 Lib\site-packages 中(上节课已看过)。
  • 注意特例:pillow 安装后在代码里 import 时叫 PIL(包名与导入名不一致)。
  • site-packages 里每个包是一个文件夹,包内有 __init__.py。
  • 小结决策链:pip install 包名 → 网速慢就改镜像源 → 网速不慢但编译失败(缺编译环境)就去网站下 whl 离线安装 → 装好的包都在 Lib/site-packages。

示例与演示

  • pip install dlib 失败案例:报错提示找不到 cmake,之后还需 VS2015 编译环境,全部装齐后终于 Successfully installed——用于说明含 C/C++ 源码的包为何难装。
  • 演示在 whl 合集网站上 Ctrl+F 查找 dlib、opencv-python,并逐段解读文件名含义。
  • 演示在资源管理器中查看 Lib/site-packages,确认安装的 pillow(导入名 PIL)、requests 等包的实际位置。

重点与难点

  • 理解纯 Python 包与含编译成分包的区别:后者安装时需要本机编译环境,这是 Windows 上装库失败的最常见深层原因。
  • whl 文件不能改名——文件名承载了包名/版本/Python 版本/ABI/平台信息,pip 靠它解析。
  • 下载平台相关 whl 时要选对 Python 版本(cp37/cp38…)和位数(win32/win_amd64),选错装不上。
  • 包名与导入名可能不一致(pillow → PIL)。

关联内容

  • 承接 10.2:pip 下载的正是 whl 文件;依赖链思想与上节依赖解析一致。
  • 换脸示例呼应第 1 章课程概述的演示(dlib + OpenCV)。
  • 安装路径 Lib/site-packages 与上节课"模块和包的存放路径"知识衔接。
  • 为 10.5 虚拟环境管理(虚拟环境目录中也有独立的 site-packages)作铺垫。