使用环境
使用pyinstaller进行打包
miniconda构建的虚拟环境,其中Python3.7
所用核心模块:pyqt5,opencv,mediapipe以及一些深度学习模型
遇到问题
-
检测所有的库
简单方法就是在命令面板运行你的主文件,能运行就可以往下打包出现EXE文件,否则不会出现exe问价你。 -
压缩打包后文件大小
进入到虚拟环境后在进行下载,避免的miniconda直带的pyinstaller导致出现问题,同时虚拟环境只包含了呵项目有关的库,使得最终的包更小一点,避免一些额外的库
pip install pyinstaller
- 打包目录结构
pyinstaller -D -c r_window.py
打包后会出现两个文件夹build和dist以及一个后缀名。spec的配置文件。
有关系的只有dist文件夹,其余打包完成后可以删除掉
- failed to execute script pyi_rth_multprocessing
双击EXE文件,警告框中报上诉错误,首先确认是否在dist文件夹中打开exe,bulid中的exe一般会报错,其次在考虑将你的python37.dll复制到该路径下
5.failed to execute script (项目名)
双击EXE文件,警告框中报上诉错误,这个错误原因就广泛的多了,将exe文件拖拽到命令控制面板,运行查看具体错误。
- ModuleNotFoundError: No module named ‘numpy.random.common’
说明numpy的版本出现问题和其中的opencv或TensorFlow等有冲突,更换版本
像我之前是numpy==1.19.4
pip uninstall numpy
pip install numpy==1.16.5
- ImportError: OpenCV loader: missing configuration file: [‘config.py’]. Check OpenCV installation.
找不到你的opencv配置文件
新建一个py文件
import cv2
print(cv2.__file__)
得到D:\miniconda\envs\py37\lib\site-packages\cv2\init.py,重新打包
pyinstaller -D -c r_window.py --path="D:\miniconda\envs\py37\lib\site-packages\cv2"
9.ModuleNotFoundError: No module named ‘**’
缺少包,而不是缺少包里的某一个方法或属性,在源码中import一下,或者在打包的时候加上 --hidden-import=****
pyinstaller --hidden-import=decimal -D -c r_window.py --path="D:\miniconda\envs\py37\lib\site-packages\cv2"
10.SyntaxError: Non-UTF-8 code starting with ‘\xb4’ in file C:…
在文件第一行添加;并将含中文的路径换为英文
# coding:utf-8
- AttributeError: type object ‘h5py.h5.H5PYConfig’ has no attribute ‘reduce_cython’
网上说是h5py,numpy,TensorFlow版本不一致导致的
我将h5py == 2.10.0降为2.8.0即可
pip uninstall h5py
pip install h5py==2.8.0
终极奥义
auto-py-to-exe,基于pyinstaller写的一个界面,简化操作,自动生成所需命令,pip下载即可
pip install auto-py-to-exe
详见博客:https://www.jianshu.com/p/e33b4f0373bc
总而言之,言而总之,问题每个人都不一样,这只是一部分,慢慢补充,欢迎建议。