jieba icon indicating copy to clipboard operation
jieba copied to clipboard

你好~ 在打包程序的时候出现了问题

Open lisnb opened this issue 11 years ago • 21 comments

你好~我在我的一个小项目里使用了结巴分词,首先对您的努力表示感谢~

我在使用py2exe打包我的程序的时候,其他的模块都没有出现问题,打包能够成功,但在运行的时候一直显示

IOError: [Errno 2] No such file or directory: 'E:\python\links\romeo\dist\l ibrary.zip\jieba\finalseg\prob_start.py'

我单独写了一个.py文件,只有一句话: import jieba seg=jieba.cut('hello jieba')

打包,但运行的时候也是上面的那个结果。 image

我不知道您是否打包过使用了结巴的程序,如果有,您遇到过这样的问题吗? 或者您知道问题可能出现在哪吗? 谢谢啦~

lisnb avatar Apr 10 '13 03:04 lisnb

@lisnb , 我没有用过py2exe。看错误信息,'E:\python\links\romeo\dist\l ibrary.zip\jieba\finalseg\prob_start.py' 这个py文件被打包在zip里面了,所以读不出来。等会我装个py2exe试一试

fxsjy avatar Apr 10 '13 04:04 fxsjy

@fxsjy 嗯,非常感谢您的回复

您试过之后应该就会看到,所有的依赖项都会被打包在一个zip文件里(如果没有其他设置的话)

也有可能是py2exe的问题,那么您用过其他的什么打包的工具打包过使用了结巴的程序吗?

lisnb avatar Apr 10 '13 04:04 lisnb

@lisnb ,试了一下,确实不行。 路径问题不好处理啊,数据文件应该怎么放?

fxsjy avatar Apr 10 '13 05:04 fxsjy

@fxsjy 网上是这么说的,不知道你问的是不是这个

from distutils.core import setup import glob import py2exe

setup(console=["myscript.py"], data_files=[("bitmaps", ["bm/large.gif", "bm/small.gif"]), ("fonts", glob.glob("fonts*.fnt"))], ) 说明:data_files选项将创建一个子目录dist\bitmaps,其中包含两个.gif文件;一个子目录dist\fonts,其中包含了所有的.fnt文件。

我在想的是,好像分词的字典没有被收进包里,为什么代码文件也没有呢,好奇怪。我以前也没有打包过,我也研究一下...

lisnb avatar Apr 10 '13 06:04 lisnb

问题还在,我尝试手工把prob_start.py插入到zip包中,可这也不是解决方法,而且不管用。

yangboz avatar Jun 22 '13 01:06 yangboz

@yangboz , 这个问题解决了,你git pull更新一下。 我用cxfree试验成功了。

测试程序: hello.py

#encoding=utf-8
import jieba
jieba.set_dictionary("./dict.txt")
jieba.initialize()
s="我研究生命起源。"
print " ".join(jieba.cut(s))

dict.txt 放在hello.py 同级目录。

fxsjy avatar Jun 22 '13 13:06 fxsjy

pull下来安装最新的jieba 代码后,引用“jieba.set_dictionary("./dict.txt")jieba.initialize()” 路径错误信息是:jieba\posseg..dict.txt; 不用“jieba.set_dictionary("./dict.txt")jieba.initialize()” 后的错误信息是:jieba\posseg\dict.txt;

yangboz avatar Jun 22 '13 17:06 yangboz

@yangboz , sorry,昨天的更新没有解决posseg读词典的路径问题,麻烦你再pull一下试一试。 下面是我的测试程序:

#encoding=utf-8
import jieba
jieba.set_dictionary("./dict.txt") #相对路径
#jieba.set_dictionary("c:/tmp/dict.txt")  #也支持绝对路径
jieba.initialize()

from jieba import posseg

s="我研究生命起源。"
print " ".join(jieba.cut(s))
for w in posseg.cut(s):
    print w.word,w.flag

fxsjy avatar Jun 23 '13 04:06 fxsjy

pull到最新代码,最后还有提示提示 File "genericpath.pyc", line 54,in getmtime WindowError: [Error 3] " "xxx\dist\library.zip\jieba\dict.txt"

我用的是 py2exe,和cxtree应该差不多。

yangboz avatar Jun 23 '13 05:06 yangboz

@yangboz , 必须调用jieba.set_dictionary明确指出词典的路径,否则会在默认位置寻找dict.txt。但是被py2exe打包之后就找不到了。

fxsjy avatar Jun 23 '13 05:06 fxsjy

pull到最新的,代码有看到有变化,pseg_cut 有过滤一些空白词汇了,但是最后打包成exe的时候,同时“明确指出词典的路径”后,原来utf-8编码到exe运行的时候成了“cp936”了,还不确定是py2exe的问题。

yangboz avatar Jun 23 '13 15:06 yangboz

车库咖啡会场现场解决了:-) 总结如下: str()操作中文字符+操作,python转换尝试寻找系统默认的编码; dict定义中文需要"\u"; 文件io输出也需要"encode('utf-8)", py2exe中文问题解决.

yangboz avatar Jun 27 '13 16:06 yangboz

@yangboz , 昨晚很有意思,大牛们在上面讲,咱俩在调程序。

fxsjy avatar Jun 28 '13 02:06 fxsjy

你好,这个问题解决了吗?我也碰到相同的问题,很懊恼,jieba官网上说,支持py2exe的,但是制作后,还是不行

AlgorithmFan avatar Oct 23 '13 07:10 AlgorithmFan

在上次来源大会现场作者帮助下,解决了,麻烦你贴下你的错误信息!

Send from Yangbo's iPhone.

On 2013年10月23日, at 15:17, AlgorithmFan [email protected] wrote:

你好,这个问题解决了吗?我也碰到相同的问题,很懊恼,jieba官网上说,支持py2exe的,但是制作后,还是不行

— Reply to this email directly or view it on GitHub.

yangboz avatar Oct 23 '13 07:10 yangboz

你好,按照你上面说的方法,加上 jieba.set_dictionary("dict.txt") jieba.initialize() 仍然出现下面的错误。

Traceback (most recent call last): File "mainWidget.py", line 6, in File "docKeyword.pyc", line 13, in File "jieba\posseg__init__.pyc", line 61, in File "jieba\posseg__init__.pyc", line 20, in load_model IOError: [Errno 2] No such file or directory: 'E:\crawWenkuBC\dist\library.zip\jieba\dict.txt'

AlgorithmFan avatar Oct 24 '13 00:10 AlgorithmFan

看错误信息还是这个dict.txt的路径问题,这个文档一直说的很晦涩,你先参考下我这打包程序中的路径 https://github.com/yangboz/hairy-avenger/tree/master/KingOfProgrammer/src/Q2

yangboz avatar Oct 24 '13 01:10 yangboz

谢谢,已经解决,犯了低级错误,应该将 jieba.set_dictionary("dict.txt") jieba.initialize() 直接放在import jieba后面,然后再进行import jieba.posseg as pseg,这样才可以在程序中修改dict.txt的路径,再次表示感谢。

AlgorithmFan avatar Oct 24 '13 01:10 AlgorithmFan

Building prefix dict from C:\Users\game\Desktop\qt\test\dist\dict.txt ... Loading model from cache c:\users\game\appdata\local\temp\jieba.ua7197607c9829a7854ca3e54b4005544.cache Loading model cost 0.355 seconds. Prefix dict has been built succesfully. Traceback (most recent call last): File "test.py", line 7, in from jieba import analyse File "jieba\analyse_init_.pyo", line 9, in File "jieba\analyse\tfidf.pyo", line 65, in init File "jieba\analyse\tfidf.pyo", line 42, in init File "jieba\analyse\tfidf.pyo", line 47, in set_new_path IOError: [Errno 2] No such file or directory: 'C:\Users\game\Desktop\qt\test\dist\library.zip\jieba\analyse\idf.txt

idf.txt还是不行

`# -- coding: utf-8 -- import sys sys.path.append("../") import jieba jieba.set_dictionary("./dict.txt") jieba.initialize() from jieba import analyse jieba.analyse.set_idf_path("./idf.txt")

if name == 'main': seg_list = jieba.cut("我来到北京清华大学", cut_all=False) print("Default Mode: " + "/ ".join(seg_list)) # 默认模式

s = "此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。"
for x, w in jieba.analyse.extract_tags(s, withWeight=True):
    print('%s %s' % (x, w))`

很简单的代码

shymaggie avatar Jul 25 '17 12:07 shymaggie

还是不行哈

yuanjie-ai avatar Sep 08 '17 03:09 yuanjie-ai

个人经验,win上面打包的话用pyinstaller比较简单一些,py2exe和cxfreeze我都没太学会.

shouldsee avatar Apr 04 '22 13:04 shouldsee