记录Python项目打包遇到的各种问题

使用环境

使用pyinstaller进行打包
miniconda构建的虚拟环境,其中Python3.7
所用核心模块:pyqt5,opencv,mediapipe以及一些深度学习模型

遇到问题

  1. 检测所有的库
    简单方法就是在命令面板运行你的主文件,能运行就可以往下打包出现EXE文件,否则不会出现exe问价你。

  2. 压缩打包后文件大小
    进入到虚拟环境后在进行下载,避免的miniconda直带的pyinstaller导致出现问题,同时虚拟环境只包含了呵项目有关的库,使得最终的包更小一点,避免一些额外的库

pip install pyinstaller
  1. 打包目录结构
pyinstaller -D -c r_window.py

打包后会出现两个文件夹build和dist以及一个后缀名。spec的配置文件。
有关系的只有dist文件夹,其余打包完成后可以删除掉

  1. failed to execute script pyi_rth_multprocessing
    双击EXE文件,警告框中报上诉错误,首先确认是否在dist文件夹中打开exe,bulid中的exe一般会报错,其次在考虑将你的python37.dll复制到该路径下

5.failed to execute script (项目名)
双击EXE文件,警告框中报上诉错误,这个错误原因就广泛的多了,将exe文件拖拽到命令控制面板,运行查看具体错误。

  1. ModuleNotFoundError: No module named ‘numpy.random.common’
    说明numpy的版本出现问题和其中的opencv或TensorFlow等有冲突,更换版本
    像我之前是numpy==1.19.4
pip uninstall numpy
pip install numpy==1.16.5
  1. 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
  1. 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

总而言之,言而总之,问题每个人都不一样,这只是一部分,慢慢补充,欢迎建议。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值