pycharm如何正确打包ocr且让打包出来的exe尽量小

打包ocr的过程我遇到了很多个问题,整个过程涉及到路径地修改和环境变量等问题。我相信很多人都会遇到与我相同的问题,我把我打包的过程中遇到的各种问题尽量都写下来。希望对大伙有帮助。

起先我的开发环境是这样设置的

选了第三个  系统环境  ,结果利用 pyinstaller 打包时 ,把系统里的所有库 包括我的py主程序没有使用到的库 全部都给打包进来了,结果自然是文件很大。

 为了解决这个问题,我改为选择第一个  Virtualenv  Environment  ,在主程序的根目录下建立了一个虚拟环境,但是点击确定时,却提示我说:权限被拒绝。

这个问题的本质就是,你当时安装python时,选择了傻瓜式安装,python 安装在你的个人名义下。所以如今使用这个python解释器时,系统认为你是个人名义下的,不是整个电脑的,于是认为没有这个权限,拒绝了。

解决的方法是:建议重新安装python。我下载了

3.9.5版本的,双击安装。

 下面的Add python 3.9 to PATH打√,然后点击上面的Customize  installation 。然后进入下一个界面,记得对  for  all  user  打√,接着一步步点下一步安装 直到结束。

这样之后,你的python ,就安装在这个路径下。并且是权限没有受到限制的。

这样你就能顺利设置了虚拟环境了。

扫描类的pdf转word文字时,基本上要用到ocr工具。

要事先安装ocr,傻瓜式安装会安装在C盘。

我的py主程序,用到的模块有:

其中os是python自带的,不需要安装,其他的通过pycharm下面的Terminal安装的:

Terminal,通过pip install xxx安装你需要用到的模块

pip  install  PIL会出错,要改为pip  install  image 就可以。

运行时报No module named 'frontend',通过额外安装pip install PyMuPDF解决;

报Error: No module named 'exceptions',通过pip install python-docx解决;

接着又出现下方错误提示,

这个问题可以通过pip install PyMuPDF==1.19.0解决,这样说明之前PyMuPDF的版本太低,是没有pageCount这个属性的。

((

顺带说一下,运行中提示DeprecationWarning: ANTIALIAS is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.LANCZOS instead.

说ANTIALIAS被弃用了,而我在改变图片像素时,正好就用到了Image.ANTIALIAS,原代码:

我干脆把上面这句改成了

结果发现识别出来的出错率还反而更低了。这是一个经验之谈。

))

继续将打包的话题:

py运行时,它是先去找 site-packages\pytesseract\pytesseract.py文件。

这里有两种可能:如果你是设置conda作为解释器而不是建立虚拟环境的,那个系统会去读pytesseract.py文件时,读的是具体位置在D:\ProgramData\Anaconda3\Lib\site-packages\pytesseract\pytesseract.py的这个。

(你打包时系统也会打包走这个py。因此,你的位置指引若需要修改,就改这个py。)

如果你是建立了虚拟环境,venv建立在你的主程序的同个根目录里,那么程序运行或者打包时,系统找的那个文件,就是主程序的根目录下的py文件。具体位置在

(py主程序的根目录)+  \venv\Lib\site-packages\pytesseract\pytesseract.py

然后通过pytesseract.py里的

这段代码,赋值了tesseract的位置,让系统通过你之前设置好的环境变量,找到ocr工具。

如果你没有设置好环境变量,那么就把上面这句话改成

让系统直接去找你安装的工具。

按上面的步骤 ,打包出来的exe ,在你的电脑上是可以运行的,但是去到别人的电脑就无法运行了。因为别人的电脑是没有像你的电脑一样在C盘的特定位置安装有tesseract工具的。

于是,上面的这种网上大多数说到的修改方法,只能在你的电脑上使用,打包exe去到别人的电脑运行就会报错

说你没有安装或者安装后没设置虚拟环境。

解决方法,去C盘把ocr工具复制出来, 放到了你的py主程序根目录下。

然后pytesseract.py里,就对应着写,把路径引到根目录下的这个ocr,

 这样子,打包好的exe,根目录下放着从C盘复制来的 Tesseract-OCR文件夹,一起发给其他人就可以使用了。

另外还有一点要特别注意的:在 pyinstaller  -F  XX.py 之前,一定要先 pip  install  pyinstaller安装pyinstaller。不然虽然也能生成exe,但生成出来的exe文件会大很多倍。

经过这一番折腾,最终我打包出来的文件从之前的347M,缩小到现在66M,缩小了5倍之多。

接着我们会想,能不能把这个辅助文件夹 Tesseract-OCR一起打包进去刚刚打包出来的exe呢?

具体请先读一下我之前的这篇文章,其中的原理必须懂, 不然你会看了懵圈。

python如何把程序运行时的需要用到的辅助文件,一起打包进exe里_py617的博客-CSDN博客

接下来我们讲这个问题我的解决方法:

pytesseract.py里进行这样的修改:

 代码如下:

import sys   
import os
def resource_path(path_a):
    if getattr(sys, 'frozen', False): #是否Bundle Resource
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, path_a)
fuzhu_filename = resource_path(os.path.join("",))

tesseract_cmd = os.path.abspath(os.path.join(fuzhu_filename,'Tesseract-OCR','tesseract.exe'))

然后打开第一次打包exe时,同个根目录下生成的spec文件。做出如下修改: 

 意思是要打包的文件时 tpdf_docx.py ,地址是 xxx,然后打包py文件时,连同Tesseract-OCR要一起打包,打包过去后,名字同样叫Tesseract-OCR。

最后,在pycharm的test.py下面输入pyinstaller tpdf_docx.spec。按Enter键等待,最终的文件生成在dist里。之前第一次生成的exe会被替代掉,你若还要那个第一次生成的exe,就在pyinstaller tpdf_docx.spec之前,先把它复制出来就行了。

这个问题需要不停尝试,中间总会遇到这样那样的问题,但是只要善于琢磨,相信过程是曲折的,前途是光明的。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值