生成Windows可执行文件后运行报错:ImportError: No module named face_recognition
解决Windows打包人脸识别程序时的ImportError问题
这是跨平台Python程序打包时非常常见的坑——你在Ubuntu上装的dlib和face_recognition都是针对Linux编译的,和Windows环境完全不兼容,而且打包工具很可能没把这些依赖正确打包进可执行文件里。给你几个一步步解决的方案:
1. 先在Windows环境下重现可运行的程序
因为带C扩展的库(比如dlib)是和系统架构绑定的,Ubuntu上的安装包在Windows上完全用不了,所以必须先在Windows里重新搭环境:
- 安装和Ubuntu版本一致的Python(比如Python 3.6,毕竟Ubuntu 16.04默认的Python版本偏老,版本一致能减少兼容问题)
- 安装dlib:别自己编译,直接用预编译的wheel包,执行
pip install dlib-bin - 接着安装其他依赖:
pip install face_recognition numpy - 先在Windows命令行里运行你的Python脚本,确认能正常输出预期结果,再进行打包操作——这一步非常关键,先确保脚本本身在Windows能跑,再解决打包问题。
2. 用PyInstaller打包时补全依赖(最常用方案)
如果用PyInstaller打包,默认可能会漏掉face_recognition这类带扩展的库,或者没打包它依赖的模型文件:
- 先尝试基础打包命令:
pyinstaller --onefile your_script.py - 如果还是报ImportError,显式指定隐藏导入的依赖:
pyinstaller --onefile --hidden-import face_recognition --hidden-import face_recognition_models your_script.py - 另外,
face_recognition需要预训练的模型文件,PyInstaller有时候不会自动打包这些文件。你可以找到Windows下模型的路径(一般在Python安装目录\Lib\site-packages\face_recognition_models\models),要么手动把整个models文件夹复制到生成的exe同目录下,要么用--add-data参数打包进去:
注意Windows下pyinstaller --onefile --add-data "C:\PythonXX\Lib\site-packages\face_recognition_models\models;models" your_script.py--add-data的路径分隔用分号;,前面是源路径,后面是打包后的目标路径。
3. 尝试其他打包工具
如果PyInstaller始终解决不了问题,可以换用对C扩展库支持更好的工具:
- cx_Freeze:需要写一个setup.py配置文件,明确列出所有依赖模块,包括
face_recognition和dlib,然后用命令生成可执行文件 - PyOxidizer:它会把Python解释器和依赖一起打包成单个二进制文件,对带C扩展的库兼容性更好,不过配置相对复杂一点
内容的提问来源于stack exchange,提问作者Sachin Km
相关产品推荐
相关产品推荐

