在安装tgrocery的时候会报错,而且会一直出现错误,看以前也没有具体写tgrocery安装报错如何处置的文章,写一下自己在安装tgrocery过程中遇到的问题。可能这篇文章有点长,因为遇到的问题很多。
两点说明
1 首先 下载 tgrocery至最新版本
pip install tgrocery
2 运行代码,发现有‘’converter‘’库没有安装
File "/anaconda3/envs/c_ocr/lib/python3.6//init.py", line 1, in <module>
from converter import *
ModuleNotFoundError: No module named 'converter'
产生原因: 即在init.py的这个文件中引用了converter这个模块。这个converter模块并不是一个第三方库模块,而是site-packages/tgrocery路径下,模块安装包里面自己写的模块 调用自己同级文件夹模块 调用的错误
解决办法:
vi /anaconda3/envs/c_ocr/lib/python3.6//init.py
进入到这个init.py的文件中,
from .classifier import *
from .converter import *
在模块前边加个点.
3 继续执行代码 仍然出现错误
File "/anaconda3/envs/c_ocr/lib/python3.6/site-packages/tgrocery/converter.py", line 2, in <modul e> import cPickle ModuleNotFoundError: No module named 'cPickle'
没有发现cPickle这个模块
产生原因: 本人是在python3的环境下跑这个代码的,而cPickle这个模块在Python2当中有,而在python3当中这个模块被整合到了pickle5当中。
解决办法:在python3环境下
pip install pickle5
然后进入到conver.py这个文档中
vi /anaconda3/envs/c_ocr/lib/python3.6/site-
packages/tgrocery/converter.py
把import cPickle 改成在python3中的pickle 注意都是小写
import pickle5
然后把converter.py文件中的所有引用cPcikle的地方都换成 pickle5 !! 这点很重要要不然以后还会报错 大概要改5/6处吧
4 再次运行模型,还是出现错误,显示没有base模块
File "/anaconda3/envs/c_ocr/lib/python3.6/site-packages/tgrocery/converter.py", line 6, in <module> from base import * ModuleNotFoundError: No module named 'base'
产生原因:base模块和converter模块一样都是site-packages/tgrocery下的文件夹
解决办法:同第2步 converter的解决办法
进入到converter.py这个文件中
vi /anaconda3/envs/c_ocr/lib/python3.6/site-packages/tgrocery/converter.py
再把base模块前加个.
import .base
5 再次运行之后出现如下错误
File "/anaconda3/envs/c_ocr/lib/python3.6/site-packages/tgrocery/base.py", line 54 print self.draw_table(
^ SyntaxError: invalid syntax
产生原因: tgrocery 这个模块是用python2写的 所以要改成python3能读懂的编译方式 (python2中print函数不加括号,python3中print函数是要加括号的)
解决办法: 在print函数后面加上括号
print( self.draw_table(
zip(
['%.2f%%' % (s * 100) for s in self.accuracy_labels.values()],
['%.2f%%' % (s * 100) for s in self.recall_labels.values()]
),
self.accuracy_labels.keys(),
('accuracy', 'recall')
) )
6 再次运行之后出现如下错误
File "/anaconda3/envs/c_ocr/lib/python3.6/site-packages/tgrocery/classifier.py", line 5, in <module>
from converter import GroceryTextConverter ModuleNotFoundError: No module named 'converter'
解决办法:
vi anaconda3/envs/c_ocr/lib/python3.6/site-packages/tgrocery/classifier.py
然后
from .converter import GroceryTextConverter
from .learner import *
from .base import *
有关tgrocery的更改就这么多了