1. 程式人生 > >pyinstaller打包jieba庫出錯——解決方法

pyinstaller打包jieba庫出錯——解決方法

先嚐試:
http://blog.csdn.net/qq_26376175/article/details/69680992這篇文章講的方法

我們開啟要使用jieba庫的指令碼,

修改之後的程式碼為:

import jieba
jieba.set_dictionary('./dict/dict.txt')
jieba.initialize()
from jieba import analyse
from class_extract_crawler import *
import threading
import time
import re

這時候轉換完畢執行發生錯誤,檢查以後發現

File not Found Error: c:/xx/temp/_MEIxxxx/jieba/analyse/idf.txt

這樣的問題。

現在我有一種解決方案,就是改一下jieba庫的原始碼,

要修改的原始碼檔案: your_path/python36/Lib/site-packages/jieba/analyse/tfidf.py

把_get_abs_path註釋掉,改成 ‘./放idf.txt的目錄/’也就是讓它不要獲取絕對路徑而是去獲取相對路徑,

原始碼檔案修改成:

'''此處為原始碼的前12行程式碼,修改的是第十二行程式碼'''
# encoding=utf-8
from __future__ import absolute_import
import os
import jieba
import jieba.posseg
from operator import itemgetter

_get_module_path = lambda path: os.path.normpath(os.path.join(os.getcwd(),
                                                 os.path.dirname(__file__), path))
_get_abs_path = jieba._get_abs_path

DEFAULT_IDF = './idf.txt'#_get_module_path("idf.txt")

修改好jieba庫的原始碼之後,注意我們修改的相對路徑是 ./idf.txt,也就是說在我們轉換好後的exe檔案的當前目錄,得有一個idf.txt才可以執行程式。

idf.txt在原始碼檔案同目錄下可以找到。複製過來就可以了。

這樣exe就可以執行成功了。

這個方法有一個不優雅的地方就是每次轉換完exe都要把jieba庫的原始碼改回去…

其它注意事項:

1.可能修改好後轉換仍不成功,注意是否是not found idf.txt,若是dict.txt檔案丟失請看開頭的連結。

2. 不成功注意,每次改完程式碼重新轉換的時候注意刪除上次的build資料夾和.spec檔案