本文将会整合出作者在实战过程中遇到的Pyinstaller打包出错的解决方法,解决方法不唯一,本文只会说名我的解决方法。
- WordCloud
- jieba
- xpinyin
WordCloud
因为在pyinstaller打包后的exe 运行时会在 C:\Users\Administrator\AppData\Local\Temp 新增了一个临时文件夹如“_MEIxxxxxx” 所有py代码都会在临时存放在这里。
当第三方库使用了__file__如下所示:
FILE = os.path.dirname(__file__)
FONT_PATH = os.environ.get(‘FONT_PATH’, os.path.join(FILE, ‘DroidSansMono.ttf’))
STOPWORDS = set(map(str.strip, open(os.path.join(FILE, ‘stopwords’)).readlines()))
jieba库也有类似加载方式。
会导致运行时__file__ 指向了上面说的临时文件夹“_MEIxxxxxx”,所以就会报错,说找不到该文件,无法打开。
这边我的解决方法是将stopwords文件直接放到项目文件夹根目录(stopwords文件在wordcloud根目录)
如下图,在项目文件夹创建一个resources文件夹并将stopwords文件放进去:
然后更改源代码(wordcloud.py)的文件指向:
FONT_PATH = os.environ.get('FONT_PATH', os.path.join(os.path.dirname(sys.executable), 'DroidSansMono.ttf'))
STOPWORDS = set([x.strip() for x in open(os.path.join(os.path.dirname(sys.executable),'./resources/stopwords')).read().split("\n")])
更改后便不再报错
jieba
jieba库也同样是__file__指向了临时文件夹“_MEIxxxxxx”的问题
方案一:
只需要将jieba根目录下的dict.txt文件放入打包文件中:
当打包的时候使用--add-data字段将dict.txt一并打包即可(打包完成后可删除dict.txt文件)
pyinstaller -F main.py --add-data dict.txt;.\jieba -w
方案二:
将结巴
只需要将jieba根目录下的dict.txt文件放入打包文件中(看方案一)
并在代码中直接引用即可(打包完成后不可删除dict.txt文件)
import jieba
jieba.set_dictionary("./dict.txt") # 指定dict.txt加载路径
jieba.initialize() # jieba库初始化
更改后便不再报错
xpinyin
打包xpinyin报错找不到Mandarin.dat,需要更改源代码,找到源文件__init__并更改如下内容:
data_path = Path(__file__).resolve().with_name('Mandarin.dat') # 原来的代码
data_path=Path('./resources').resolve().joinpath('Mandarin.dat') # 更改后的代码
上面将源代码里面的__file__更改未我们指定的相对路径./resources文件夹,所以我们需要手动将xpinyin根目录下的Mandarin.dat复制到我们的项目中:
打包后需要保留Mandarin.dat文件
更改后便不再报错
参考网址:
解决方法:pyinstaller打包缺文件_zw05011的博客-CSDN博客
使用jieba分词+PyInstaller进行打包时出现的问题_jieba 中encoding报错_AllenLink的博客-CSDN博客
解决Pyinstaller打包xpinyin报错找不到mandarin.dat_pyinstaller打包之后少.dat文件_小白救小白的博客-CSDN博客
Comments | NOTHING