pyinstaller打包jieba庫出錯——解決方法
阿新 • • 發佈:2019-02-08
先嚐試:
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檔案