使用pyinstall将python+qt的py文件打包为exe

pyinstall打包

  • 前言
  • 一、pyinstall安装
  • 二、打包步骤
    • 1.直接生成exe(最常见的方法,但qt程序可能会出现问题)
    • 2.使用moviepy包可能出现的问题
      • 2.1.问题
      • 2.2.解决方法
    • 3.打包过程可能出现的问题
      • 3.1.问题
      • 3.2.解决方法
  • 最后


前言

将python程序转为exe有三种方法,py2exe、cx_freeze和pyinstaller。其中py2exe打包的程序只能在同系统(win10打包的程序不能在xp上跑)的电脑上运行,而且需要dll依赖;cx_freeze只能打包启动模块需要拷msvcr100.dll,文件路径不能为中文;pyinstaller是目前用的最广泛的了,遇见问题一般也都能搜到解决。

一、pyinstall安装

pip install pyinstall

二、打包步骤

1.直接生成exe(最常见的方法,但qt程序可能会出现问题)

在py文件所在路径用python环境执行如下命令(xxx.py为你的py文件名,-w是只要窗体,不要控制台)

pyinstaller -w xxx.py

2.使用moviepy包可能出现的问题

2.1.问题

我使用如下方式引入包:

from moviepy import VideoFileClip

报错信息为

module 'moviepy.audio.fx.all' has no attribute 'audio_fadein

2.2.解决方法

引入该包的方式有问题,参考moviepy针对该问题的讨论改变引入包的方法即可

from moviepy.video.io.VideoFileClip import VideoFileClip

3.打包过程可能出现的问题

3.1.问题

直接生成可能会出现如下问题

With the default recursion limit (1000), the recursion error occurs at about
115 nested imported, with limit 2000 at about 240, with limit 5000 at about
660`

3.2.解决方法

按报错的提示步骤写,将如下代码放入xxx.spec的开头

import sys ;
sys.setrecursionlimit(sys.getrecursionlimit() * 5)

然后用如下方式打包

pyinstall -w xxx.spec

生成的dist文件夹里面就是你要的程序。

最后

我生成的文件有1个g大小,只引入了opencv、qt和moviepy,但是需要的各种依赖包太多了。成也萧何,败也萧何,各个独立包在写程序的时候特别好用,信手沾来;生成exe时,这些就是累赘了。在未出现更简洁的引入方式下,看来python在做exe这块暂时只能做做简单的,黑夜漫漫啊!

你可能感兴趣的:(pytorch,qt,python,opencv)