python 使用jieba+pyinstaller 打包时出现的问题
操作系统:windows10
语言:Python3.9
IDE: PyCharm
本地代码执行时,使用jieba分词库,没有问题。原代码如下:
# encoding = utf - 8
import jieba
def word_segmentation(sentence):
words_generator = jieba.cut(sentence) # 返回的是一个generator对象,foreach 后可以得出字符串
word_list = list()
for word in words_generator:
word_list.append(word)
return word_list
if __name__ == '__main__':
words = word_segmentation("人生难得几回搏")
for aword in words:
print(aword)
使用PyInstaller打包成单独的exe执行文件后,引发如下异常:
[Errno 2] No such file or directory: 'C:\\Users\\666\\AppData\\Local\\Temp\\_MEI263202\\jieba\\dict.txt'
一开始以为问题出在PyInstaller,没有将jieba的依赖包打包进exe文件中。后来参考
http://www.lxway.com/456269486.htm
发现是jieba库在运行时会去默认Python路径下去寻找dict.txt文件。而我们使用PyInstaller打包时,并没有将该dict.txt文件打包。
理解了出错的原因,解决方案有如下两种。
方案一:
因为将python程序打包成exe文件的主要目的是因为并不是每一台机器都有Python环境。而如果在不修改代码的情况下,最简单的方式就是在查找的位置上加上该文件。bz查找dict.txt的位置是C:\Users\HP\AppData\Local\Temp_MEI272322\jieba(根据自己的查找路径),然后将该文件保存在这个路径下。dict.txt文件在安装的jieba依赖包中。
方案二:
首先在windows下创建这么长的目录不太方便,作为一个coder最好的方式还是直接修改代码。修改jieba查找dict.txt文件的路径,为了方便部署,最好将查找路径设为相对于exe文件的路径。bz的做法如下:
1.首先修改代码中jieba库的dict.txt加载路径。
# encoding = utf - 8
import jieba
jieba.set_dictionary("./dict.txt") //指定dict.txt加载路径,为了方便部署,使用相对路径。
jieba.initialize() //jieba库初始化。
def word_segmentation(sentence):
words_generator = jieba.cut(sentence) # 返回的是一个generator对象,foreach 后可以得出字符串
word_list = list()
for word in words_generator:
word_list.append(word)
return word_list
if __name__ == '__main__':
words = word_segmentation("人生难得几回搏")
for aword in words:
print(aword)
最后运行成功
2022-05-06 23:23:24.722 | INFO | __main__:split_words:256 - 可拆分为:['风力', '资质']