转自:https://github.com/ageitgey/face_recognition/issues/357
使用face_recognition的打包问题
因为face_recognition会用到几个自己的模型数据,打包不能直接打进去
安装pyinstaller、face_recognition、dlib、scipy
将face_recognition_models和scipy-extra-dll拷贝到工程目录下
这两个文件夹都在Lib\site-packages\目录下
C:\Program Files\Python36\Lib\site-packages\face_recognition_models
C:\Program Files\Python36\Lib\site-packages\scipy\extra-dll
新建setup.spec
其中三个加粗斜体的地方分别修改为:需要打包的程序的py文件,打包以后存放的目录、打包以后的文件名(不含后缀)。
如:
samplemain.py
./dist/
sample
setup.spec文件内容
# -*- mode: python -*-
block_cipher = None
face_models = [
('.\\face_recognition_models\\models\\dlib_face_recognition_resnet_model_v1.dat', './face_recognition_models/models'),
('.\\face_recognition_models\\models\\mmod_human_face_detector.dat', './face_recognition_models/models'),
('.\\face_recognition_models\\models\\shape_predictor_5_face_landmarks.dat', './face_recognition_models/models'),
('.\\face_recognition_models\\models\\shape_predictor_68_face_landmarks.dat', './face_recognition_models/models'),
]
a = Analysis(['***<your python script name.py>***'],
pathex=['***<path to working directory>***'],
binaries=face_models,
datas=[],
hiddenimports=['scipy._lib.messagestream', 'scipy', 'scipy.signal', 'scipy.signal.bsplines', 'scipy.special', 'scipy.special._ufuncs_cxx',
'scipy.linalg.cython_blas',
'scipy.linalg.cython_lapack',
'scipy.integrate',
'scipy.integrate.quadrature',
'scipy.integrate.odepack',
'scipy.integrate._odepack',
'scipy.integrate.quadpack',
'scipy.integrate._quadpack',
'scipy.integrate._ode',
'scipy.integrate.vode',
'scipy.integrate._dop', 'scipy._lib', 'scipy._build_utils','scipy.__config__',
'scipy.integrate.lsoda', 'scipy.cluster', 'scipy.constants','scipy.fftpack','scipy.interpolate','scipy.io','scipy.linalg','scipy.misc','scipy.ndimage','scipy.odr','scipy.optimize','scipy.setup','scipy.sparse','scipy.spatial','scipy.special','scipy.stats','scipy.version'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
a.datas += Tree('./scipy-extra-dll', prefix=None)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='***<your python script name>***',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )
打包
在命令行中切换到工程目录下执行一下命令
pyinstaller setup.spec