1.问题描述
在使用pyinstaller打包包含spacy库的文件时出错,点击可执行文件exe时,程序闪退,通过在cmd中输入“.\文件名.exe”可以看到具体错误的原因,全部都是提示类似下图这样的错误,都是提示某些模块缺失,无法导入某些名字等
2.问题分析
首先查看了spacy的依赖库,如下图所示,发现是spacy有很多依赖库,而提示的错误基本也都是这些依赖库的问题,所以最后发现问题原因就是在主程序中没有显示的导入这些依赖库,因此打包时没有将这些依赖库给打包起来,从而造成exe文件运行失败。
3.解决办法
最终的解决办法就是将这些隐式导入的库通过显示的方式导入,将.spec文件中的hiddenimports修改为
hiddenimports=[‘srsly.msgpack.util’, ‘cymen’, ‘thinc’, ‘srsly’, ‘requests’, ‘plac’, ‘preshed’, ‘wasabi’, ‘cymem’, ‘murmurhash’, ‘blis’, ‘numpy’, ‘cymem.cymem’, ‘preshed.maps’, ‘thinc.linalg’, ‘thinc.neural._aligned_alloc’, ‘blis.py’, ‘spacy.strings’, ‘pkg_resources.py2_warn’, ‘spacy.morphology’, ‘spacy.morphology’, ‘spacy.vocab’, ‘spacy.lexeme’, ‘spacy.parts_of_speech’, ‘spacy.tokens.underscore’, ‘spacy.tokens._retokenize’, ‘spacy.lemmatizer’, ‘spacy.gold’, ‘spacy.language’, ‘spacy.tokenizer’, ‘spacy.symbols’, ‘spacy.syntax’, ‘spacy.errors’, ‘spacy.vectors’, ‘spacy.about’, ‘spacy.attrs’, ‘spacy.compact’, ‘spacy.glossary’, ‘spacy.scorer’, ‘spacy.structs’, ‘spacy.syntax.stateclass’, ‘spacy.syntax.transition_system’, ‘thinc.extra.search’, ‘spacy.syntax._beam_utils’, ‘spacy._align’, ‘spacy.tokens.doc’, ‘spacy.syntax.nonproj’, ‘spacy.util’, ‘spacy.tokens.span’]
修改完成后,使用pyinstaller -D 文件名.spec即可打包成功