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)¶
- 通用(universal):同时支持 Python 2 和 Python 3,内容是纯 Python 的包。
- 纯 Python(pure Python):也是纯 Python 内容,但只针对 Python 2 或 Python 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)作铺垫。