例如:snownlp 用pyinstaller 打包时就出现和stopwords.txt相关的找不到文件
fileNotefoundError: no such file or directory ...c:\\admin\appdata\\lacal\\temp\\_mei186082\\snownlp\\nomal\\stopwords.txt
问题分析:
出现这种文件很明显是文件没有找到,但是c盘路径那些又是一些临时文件,将这些东西打包肯定也没啥用.
在用pyinstaller打包(-F 选项),如果用到的第三方库含有data文件,而pyinstaller又没有自带该第三方库文件的hook的时候,执行打包后的exe一般会报以下错误
FileNotFoundError: [Errno 2] No such file or directory: ‘c:\\admin\appdata\\lacal\\temp\\_mei186082\\snownlp\\nomal\\stopwords.txt’
所以我们可以考虑将完整包打包进exe
那如何将第三方库打包呢?
我们可以直接做一个hook库。如下:
解决过程:
找到pyinstaller的hooks文件夹,大概位于:python根目录\Lib\site-packages\PyInstaller\hooks下。比如我的路径就是:D:\Python310\Lib\site-packages\PyInstaller\hooks
这里面都是hook-【库名】.py
例:hook-jieba.py
from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files("jieba")
例:hook-snownlp.py
from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files("snownlp")
这样在打包的时候就可以直接打包了。。
缺点:
打的包比只打包某个文件要大。。