从源代码编译并构建 dlib 的二进制包
dlib 是一个广泛使用的机器学习库,特别擅长处理图像处理、人脸识别、目标检测等任务。dlib 的开发者是 Davis King,他是一位计算机视觉和机器学习领域的专家。
当执行 pip install dlib==19.17.0
并显示 Building wheels for collected packages: dlib
时,系统正在从源代码编译并构建 dlib 的二进制包。这一过程涉及以下:
1. 从源代码下载与解压
pip 会先下载 dlib 的源代码包(.tar.gz
文件),并解压到临时目录。dlib 是一个基于 C++ 的库,源代码包含大量 C++ 文件及依赖项,解压后需要处理复杂的项目结构。
2. 配置构建工具(CMake)
dlib 依赖 CMake 作为跨平台的编译工具。此时,系统会运行 setup.py
脚本,调用 CMake 配置编译参数(如指定编译器路径、依赖库路径等)。
3. 编译 C++ 代码
核心耗时环节:dlib 的 C++ 代码需要被编译为机器码。例如:
- 人脸检测算法(如 HOG 特征提取)、神经网络模型(如 ResNet)等涉及大量矩阵运算和优化代码。
- 编译过程中,编译器(如 MSVC、GCC)会对代码进行优化,生成适用于当前操作系统和硬件架构的二进制文件。
4. 生成 Python 可调用的二进制包(Wheel)
编译完成后,系统会将生成的动态链接库(如 .pyd
或 .so
文件)打包为 Wheel 文件(.whl
),并安装到 Python 的 site-packages
目录。此步骤完成后,用户即可通过 import dlib
调用库。
为何需要等待较长时间?
• 代码规模大:dlib 包含数十万行 C++ 代码,编译时需要逐文件处理。
• 优化级别高:默认启用编译器优化(如 -O3
),提升性能但增加编译时间。
• 依赖复杂:需链接 Boost 等外部库(部分系统可能需手动安装)。
• 硬件限制:CPU 性能、内存大小直接影响编译速度。例如,树莓派等低配设备可能需要数十分钟。
如何避免编译等待?
- pip wheel dlib==19.17.0 --wheel-dir=/home/ma-user/work #保存编译后的库,以备下次直接使用。编译需要3分钟(8核CPU)
- 编译完成后
#-rw-r----- 1 ma-user ma-group 4190842 Mar 25 09:49 dlib-19.17.0-cp36-cp36m-linux_x86_64.whl - 安装即可:pip install --no-index --find-links=/home/ma-user/work dlib==19.17.0
其他
在 Jupyter Notebook (2核CPU + 4GB内存)中运行 pip install 命令后出现 **“No Kernel”** 状态。是资源耗尽导致内核崩溃,因为换8核64G内存的环境就好了。
内存不足:安装某些大型包(如 TensorFlow、PyTorch)时内存溢出,触发内核终止。
CPU 过载:编译依赖或复杂安装步骤可能导致 CPU 长时间满载,内核失去响应。
表现:安装过程中 Notebook 突然卡顿,随后内核状态变为 “No Kernel”。
dlib-19.17.0-cp36-cp36m-linux_x86_64.whl Python 包的轮子文件名解释
cp36表示该轮子文件是为 CPython 3.6 版本编译的。cp 是 CPython 的缩写,36 表示 Python 3.6。
cp36m指定了 Python 的 ABI(应用二进制接口)版本。cp36m 表示该轮子文件是为 CPython 3.6 的 m ABI 编译的。m 表示该 Python 版本启用了 --with-pymalloc 选项。
- 点赞
- 收藏
- 关注作者
评论(0)