在windows python 3.8 环境成功安装 dlib 19.19.0
一、 使用pip 安装dlib失败。
1. 安装dlib之前需要先安装cmake.
使用pip 安装cmake顺利。安装的版本为目前最新版3.16.3 .
2. 使用pip安装dlib失败。
报错显示:Python config failure: Python is 32-bit, chosen compiler is 64-bit
二、 安装失败原因分析:
1. 根据提示检查了本地环境:
(1) python版本:Python 3.8.1 [MSC v.1916 32 bit (Intel)] on win32
(2)编译器版本:
查看打印信息中的这一条:
Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.20.27508/bin/Hostx64/x64/cl.exe
2. 原因分析:
Setup.py 调用了cmake,使用本机安装的64位VC作为编译器,导致错误发生。本机安装的python3.8是32位的。
三、 解决办法
放弃pip安装,手动下载dlib最新版本,执行setup.py进行安装。
下载的dlib为最新版本19.19.
1. 通过设置参数调用setup.py。
打开setup.py文件,可以看到如下提示信息:
可见,通过-G参数可以设置编译器的类型。
2. 尝试setup.py -G参数 失败
可见,-G 为 Generator的简称。
Cmake安装成功后,存放在python安装目录下的Lib\site-packages\cmake\data\bin。其中cmake-gui.exe为UI界面。通过此界面,可以看出cmake -A 参数的四个可选值:ARM64,ARM,WIN32和x64。
尝试指定编译器为32位:
执行失败,cmake没有正确的识别generator的名字。如果不执行-A win32则依然选择编译器为64位。
不知道如何通过-G参数指定编译器为 win32。
3. 逐行查看setup.py文件,注释掉setup.py中的cmake调用,改为手工调用cmake 成功。
Setup的主要功能为收集用户参数,调用cmake,安装到python。
于是根据打印信息和程序代码可定位到调用cmake的地方:
(1)第一处:
通过打印信息可以看到,cmake_setup的内容为:
其执行失败的原因为 -G 后面的参数 visual studio 16 2019 -A win32没有被正确的识别。因此,调整参数改为手动执行,执行成功。
(2)第二处:
通过打印信息可以看到,cmake_build的内容为:
cmake --build . --config Release -- /m
执行成功。
(3)把setup.py中的对cmake的调用注释掉,再次执行setup.py。安装成功。
注释后的setup.py对应行:
再次执行setup.py文件:
安装成功: