打包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 Resourcebase_path = sys._MEIPASSelse: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之前,先把它复制出来就行了。

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

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

  1. PythonPyqt5项目开发完成后如何使用pyinstaller打包——以Pycharm编辑器为例(目前为止最正确的版本,成功打包日期为2020.11.26)

    (请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 最近用Python开发了一个可视化界面,开发过程如鱼得水 ...

  2. webpack打包路径更改_webpack打包教程

    创建package.json文件 命令:npm init 安装webpack npm install --save-dev webpack npm install --save-dev webpack ...

  3. python打包之pyinstaller(打包成exe)

    一.安装 pyinstaller 直接pip在线安装 pip install pyinstaller 二.指令介绍 常用指令 -h,–help 查看该模块的帮助信息 -F,-onefile 产生单个的 ...

  4. 用pyinstaller打包多个py文件转成exe格式

    用pyinstaller打包多个py文件转成exe格式 用pyinstaller打包多个py文件转成exe格式 响应国家号召2019-Ncov 在家闲来无聊,学写一个飞船攻打外星人的python程序, ...

  5. python怎么打包压缩文件_Python打包文件夹的方法小结(zip,tar,tar.gz等)

    本文实例讲述了Python打包文件夹的方法.分享给大家供大家参考,具体如下: 一.zip import os, zipfile #打包目录为zip文件(未压缩) def make_zip(source ...

  6. py文件打包或apk_Python文件打包成exe很简单,如果安卓手机也能运行的软件你会吗...

    前言 我相信很多小伙伴都知道怎么将Python的文件打包成exe,而且这个也非常的简单,一行代码就能轻松搞定:pyinstaller -F xxx.py 但是如果我们用Python开发一个小游戏或者一 ...

  7. pyinstaller深入使用,打包指定模块,打包静态文件

    1.标准用法: pyinstall  **.py  直接打包     pyinstall -F **.py  打包成单文件     pyinstall -W **.py  去掉控制台窗口,黑窗口    ...

  8. iOS架构-静态库.framework手动打包及脚本化打包(5)

    引用一张博客的图片来理解下基本知识(http://www.cnblogs.com/oc-bowen/p/7478461.html) 我们可以看出.a的封装和.framework的封装差不多,也有模拟器 ...

  9. android打包工具多渠道批量打包,Android 快速渠道批量打包详解教程-美团多渠道打包方案...

    今天写一篇文章来总结下android批量打渠道包美团版本.之前项目上一直用的是gradle 批量打包方式,那个速度啊真是令人发指,15个渠道得跑上半个小时,出去吃顿饭回来,还在跑.特别是赶上项目上线的 ...

  10. webstrom中打包的详细_webpack打包体积优化

    webpack webpack打包体积优化 webpack官方定义 webpack 是一个模块打包器.webpack 的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使 ...

最新文章

  1. java office 集成开发_Office文件格式突变,促使Java和Office更完美集成
  2. RDKit | BCUT:基于分子图结构的二维描述符
  3. seaborn使用violinplot函数可视化小提琴图、使用swarmplot函数添加抖动数据点(jittered points)显示数据的稠密程度
  4. 运算符中的二元重载,为什么要调用友元函数而不是全局函数的问题
  5. php 一年中所有的天,PHP获取一年中的每星期的开始日期和结束日期
  6. 使用HTML文件作为中转生成WORD文档
  7. linux操作系统下C语言编程入门小结
  8. 【二叉树】【144. 二叉树的前序遍历】【中等】
  9. Common Subsequence
  10. POJ3450 Corporate Identity —— 后缀数组 最长公共子序列
  11. python集合的运算、不使用有的运算符_无序的集合:Python中的数学集合运算
  12. Codeforces Round #607 (Div. 2) E. Jeremy Bearimy dfs + 思维
  13. 详述 ISC BIND 服务器中的信息泄露漏洞
  14. C# Lambda表达式使用累加器例子
  15. Clone使用方法详解【转载】
  16. 软考:软件设计师(历年真题汇总)|希赛网
  17. 税控盘版增值税开票软件日志加密算法分析及解密工具
  18. JDK 内置的轻量级 HTTP 服务器 --- HttpServer
  19. C#初始化结构体数组方式
  20. 时光里的魔术手小故事

热门文章

  1. 两南之行,自然文艺、轻奢浪荡
  2. 2010年翡翠岛露营
  3. Arduino+WZ指令+Onenet
  4. MetaLife与ESTV建立战略合作伙伴关系并任命其首席执行官Eric Yoon为顾问
  5. 为胎儿诵地藏经的好处(合集)怀孕的一定要看哦!
  6. UltraLAB台式图形工作站(图形+超算+私有云通吃~图灵超算工作站介绍)
  7. 可以打印快递电子面单的表格
  8. 计算机键盘切换,笔记电脑键盘怎么切换_笔记本小键盘怎么切换-win7之家
  9. vue项目图标处理工具
  10. 今天给大家推荐一个Cleaner One for mac(系统清理优化工具)