我在网上看了很多的文献,掉进了很多坑。下面,自己总结成大白话的步骤,方便大家来操作。
【【【准备工作】】】
1.自己写好的主程序:my_assistant.py (不能为中文名字,否则会失败)
2. 将py转变成pyd的程序:build_pyd.py(自己创建一个build_pyd.py,粘贴下图片中代码)
from distutils.core import setup
from Cython.Build import cythonize
setup(
name='any words.....',
ext_modules=cythonize("my_assistant.py"),
)
# 注意!
①. 我是python3.7,所以是需要安装 Visual Studio 2019;python3.5以上的都可以用2019版,其他python版本请自行百度;
②.安装图片上的这两个,python 本机开发工具默认不选,自己选上!
3.面向客户的程序:client_service.py (自己创建一个client_service.py,粘贴下面代码;需要注意的是:如果my_assistant.py引用了其他包,比如import time, import os 等等,这些都要在本程序前面列示!下面代码中仅以import time 作为示例。)
from my_assistant import *
import time # 根据自己实际情况填写
if __name__ == '__main__':
if args.input is None:
print('找不到对象')
else:
my_assistant(args.input, args.output)
提示:① 本文运用 pyinstaller 打包成 exe 。
② 不知道为什么这块代码会报错,但是能正常运行主程序(my_assistant.py),所以暂且忽略了。
4.自己做好的图标 (一定是ico格式的图片,我准备的是 00001_7.ico 文件)
5.把这些放进一个文件夹里,我是在桌面创建一个叫 ‘我的小助手’ 的文件夹,把上述1-4的内容都放了进去。
【【【 准备工作结束后,在管理员模式下运行 windowsPowerShell,开始运行下面的代码】】】
第一步:将主程序的 包路径包含:site-packages 的单独提出来(就是网上文献所谓的第三方包的文件夹拷贝过来)
提问:什么是第三方包?
答:以我为例,我自己是先装的Anaconda3后安装的Pycharm。我理解是引用的包不在Anaconda3\Lib 路径下,都算第三方包,都需要找到路径后,复制、粘贴到‘我的小助手’文件夹中。提示下,需要将使用的整个第三方包文件夹复制粘贴过来,不要只复制粘贴你所使用的第三方单个py文件。
第二步:复制粘贴 build_pyd.py ; client_service.py 到我的小助手的文件夹里面
(再次提示!client_service.py里面包含my_assiatant.py引用的各种包,比如上面的import time)
第三步:在windowsPowerShell输入代码: cd C:\Users\x\Desktop\我的小助手
第四步:在windowsPowerShell输入: python build_pyd.py build_ext --inplace
第五步:生成文件 xxx.cp35-win_amd64.pyd ,手动将其重命名为xxx.pyd
第六步:手动删除build文件夹; 删除my_assistant.py(我删了,不知道不删好使不)
第七步:输入: pyinstaller -p docx\api.py -i 00001_7.ico client_service.py
#提示 ①pyinstaller -p之间有空格!
②因为自己引用了docx\api.py 第三方包,所以这么写代码,请根据你自己实际情况填写此处代码!
# 因为最后生成的文件太大,所以我没写上 -F,写上后,最后生成的是一个exe程序,不是一个里面什么都有的文件夹。
第八步:在生成的dist文件夹里面找 client_service.exe
【【【 后续打包报错,持续更新...】】】
问题1:打包包含cv2库的代码,最后打包打开 exe程序,却一闪而过,用手机录视频,发现报错:ImportError: OpenCV loader: missing configuration file: [‘config.py‘]. Check
解决方法:在原来代码的最后,加上
--paths="C:\ProgramData\Anaconda3\Lib\site-packages\cv2"(具体路径根据自己电脑定)
# 根据前面的例子,在最后加上一段代码
pyinstaller -p docx\api.py -i 00001_7.ico client_service.py --paths="C:\ProgramData\Anaconda3\Lib\site-packages\cv2"
如果最后打包打开 exe程序,还是一闪而过,上述代码没有起到效果,用手机录视频,发现报错的最后几行如下:
ImportError: OpenCV loader: missing configuration file: ['config.py']. Check OpenCV installation.
复制、粘贴 cv2文件里的所有内容到 打包成exe 同级目录下的 cv2文件夹里。
问题2:打包paddleocr库,最后打包打开 exe程序,却一闪而过,用手机录视频,发现报错的最后几行如下:
File "subprocess.py", line 800, in __init__
File "subprocess.py", line 1207, in __execute__child
FileNotFoundError: [WinError 2] 系统找不到指定的文件。
解决方法:注释掉 paddle\dataset\image.py 的几行代码,之后再进行打包(多次确认有没有注释掉,因为属于库的代码,所以会提示修改不了等情况),具体方法参考这篇文章的 “ 二、关闭线程(很重要)”部分,地址:成功解决-PaddleOCR打包exe--Pyinstaller_aqqwvfbukn的博客-CSDN博客_paddleocr打包一、首先在虚拟环境中能够成功运行,二、关闭 多进程,否则当运行exe时电脑会有10多个 main.exe 进程,电脑内存占用直接90%。找到所在环境下的 image.py 文件我的是“D:\virtualenv\OCR\Lib\site-packages\paddle\dataset\image.py”把这一部分代码 注释掉
```pythonif six.PY3: import subprocess import sys import_cv2_proc = subprhttps://blog.csdn.net/aqqwvfbukn/article/details/120553124?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164924304616782184624292%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164924304616782184624292&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-120553124.142^v5^pc_search_insert_es_download,157^v4^control&utm_term=%E6%89%93%E5%8C%85paddleocr+subprocess.py&spm=1018.2226.3001.4187
问题3:打包paddleocr库,最后打包打开 exe程序,却一闪而过,用手机录视频,发现报错的最后几行如下:
File "paddle\fluid\core.py", line 294, in <module>
File "paddle\fluid\core.py", line 256, in <module>
ImportError: DLL load failed: 找不到指定的模块。
解决方法:进行以下四步操作:1.复制、粘贴 paddle文件夹下的所有.py文件 到打包成exe 同级目录下的 paddle文件夹下。2.复制、粘贴 paddle\fluid 文件夹 到打包成exe 同级目录下的 paddle文件夹下。3.复制、粘贴 paddle\distributed 文件夹 到打包成exe 同级目录下的 paddle文件夹下。4.复制、粘贴 paddle\libs 里的所有文件 到打包成exe 同级目录下。
问题4:打包paddleocr库,最后打包打开 exe程序,却一闪而过,用手机录视频,发现报错的最后几行如下:
File "ppocr\utils\e2e_utils\pgnet_pp_utils.py", line 25, in <module>
ModuleNotFoundError: No module named 'extract_textpoint_slow'
解决方法:进行以下两步操作:1.复制、粘贴 paddleocr\ppocr 文件夹 到打包成exe 同级目录下。2.复制、粘贴 paddleocr\ppstructure 文件夹 到打包成exe 同级目录下。(注意:这两步都不需要在exe 同级目录下创建paddleocr,直接复制粘贴ppocr和ppstructure文件夹即可。)