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执行文件后,引发如下异常:
image
[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)

image
最后运行成功
2022-05-06 23:23:24.722 | INFO | __main__:split_words:256 - 可拆分为:['风力', '资质']

posted @ 2022-05-06 23:40  darling331  阅读(289)  评论(0编辑  收藏  举报