PyQt5 python程序打包成.exe文件

Posted ༄༄小半生༅࿐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyQt5 python程序打包成.exe文件相关的知识,希望对你有一定的参考价值。

目录

 前言

一、安装pyinstaller

二、pyinstaller打包

2.1 pyinstaller打包机制

2.2 单个文件打包

2.3 多个文件打包

三、测试

3.1 打包的文件

3.2 打包结果

四、新建虚拟环境打包

总结


前言

我们在pycharm上写的程序在发送到一台没有安装python解释器的机器上是不能运行的,甚至还要安装程序中所使用的第三方包,这样极其不方便。但是PC是可以直接运行.exe文件的,因此我们通过将程序打包成.exe进行执行,做到分享即可用。

PS: 如果打包为exe的话,版本尽量选择python3.6+32位版本,因为win64位系统向下兼容32位程序,但是如果不考虑32位系统的话无所谓,直接python64位版本直接打包就可以,只是只能在win64位系统上跑。

一、安装pyinstaller

首先安装pyinstaller,使用安装命令:pip install pyinstaller;使用清华大学镜像源加快速度:

pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

结果如下:

我已经安装过了,所以会显示已经存在。

二、pyinstaller打包

2.1 pyinstaller打包机制

 我们写的python脚本是不能脱离python解释器单独运行的,所以在打包的时候,至少会将python解释器和脚本一起打包,同样,为了打包的exe能正常运行,会把我们所有安装的第三方包一并打包到exe。

  即使我们的项目只使用的一个requests包,但是可能我们还安装了其他n个包,但是他不管,因为包和包只有依赖关系的。比如我们只装了一个requests包,但是requests包会顺带装了一些其他依赖的小包,所以为了安全,只能将所有第三方包+python解释器一起打包。

2.2 单个文件打包

cmd进入py程序项目目录,执行命令:

pyinstaller -F -w -i xxx.ico main.py --noconsole

或者:

pyinstaller -F -w --icon=xxx.ico main.py --noconsole

ps: -F参数表示覆盖打包,这样在打包时,不管我们打包几次,都是最新的,固定命令。-w表示窗体程序,--icon是设置exe的显示图标,'main.py'是程序的入口(如果是单个文件就换成文件名,如:hello.py),--noconsole 表示不展示cmd窗口,反过来想看cmd窗口就改成--console。*.ico文件可以到网上ico矢量图在线转换工具处理。

常用打包命令:

打包exe:pyinstaller -F setup.py

不带控制台的打包:pyinstaller -F -w setup.py 

打包指定exe图标打包:pyinstaller -F -i xx.ico setup.py

2.3 多个文件打包

多个.py文件打包命令格式如下:

pyinstaller [主文件] -p [其他文件1] -p [其他文件2] --hidden-import [自建模块1] --hidden-import [自建模块2]

具体看:Pyinstaller打包多个.py文件_拓跋梁哲的博客-CSDN博客_pyinstaller打包多个py文件

三、测试

PyQt5(一) PyQt5安装及配置,从文件夹读取图片并显示,模拟生成素描图像中的程序进行打包测试:

3.1 打包的文件

 其中main.py是主程序入口文件,其他.py文件是自建模块,需要在主文件中使用。

cmd进入此项目目录进行打包:

pyinstaller -F -i crack.ico -w VIPCracker.py -p CholenSql.py -p ImgICon.py -p VIPGUI.py --hidden-import CholenSql --hidden-import ImgICon --hidden-import VIPGUI

pyinstaller -F -w main.py -p enterTest1.py -p enterTest2.py -p test1.py -p test2.py --hidden-import enterTest1 --hidden-import enterTest2 --hidden-import test1 --hidden-import test2

3.2 打包结果

 打包完成后出现了main.exe文件,现在运行它看是否会正常执行:

 可见打包是成功的,但是有一个缺陷,就是这个.exe非常大,足足有281M。

 通过检查发现,是因为在打包的时候pyinstaller会自动收集打包过程所需的一些py依赖包,而我是用Anaconda自带的base进行程序运行的,而其中安装了很多第三方库,以至于都会被打包起来。

四、新建虚拟环境打包

为了解决不将程序相关的第方三库一起打包,一个最直接的想法是新建一个虚拟环境,里面只装我们当前项目需要的py包,这样打包过程中就不会搞进去一些没用的py包了。我们在Anaconda中创建一个新的虚拟环境运行PyQt项目:pyqt_env

命令详见Anaconda中虚拟环境在命令行中的查看、创建、切换

 进入新的虚拟环境查看安装的第三方模块:

 可以看到它依旧自带了太多的第三方库,由于没有找到在anaconda下创建“干净的”虚拟环境方法,因此删除后用Python3.3 之后的模块 venv 代替 virtualenv 工具(用venv的好处是不用单独安装,3.3 及之后的版本,都可以使用此创建虚拟环境)来创建虚拟环境:

在D:\\python\\Anaconda\\envs目录下用venv模块创建一个虚拟环境:

 激活虚拟环境:

cmd进入D:\\python\\Anaconda\\envs\\pyqt_env\\Scripts下,然后输入激活命令:activate.bat(或者直接输入activate);退出虚拟环境:deactivate.bat

可以看到只有两个基本包,达到目的。安装本次测试需要的包:

 pycharm添加新创建的虚拟环境:

添加新环境之后确保程序可以正确运行,然后cmd进入新创建的虚拟环境, 安装 pyinstaller,再cd到项目文件夹:

pyinstaller -F -w main.py -p enterTest1.py -p enterTest2.py -p test1.py -p test2.py --hidden-import enterTest1 --hidden-import enterTest2 --hidden-import test1 --hidden-import test2

 打包结果如下:

 

 可以看到从原来的281M降到了79.3M,达到了我们期望的目标。


总结

本次实验练习将程序打包成.exe文件,同时创建了用不同方法新的虚拟环境。

参考文章:

(1)Python程序打包成.exe(史上最全面讲解)_断桥之蝶恋花的博客-CSDN博客

(2)Python 虚拟环境 看这一篇就够了_简说Python的博客-CSDN博客

将Python程序打包成exe文件

我新写了一篇更加完整的文章,与这篇文章相比,它新增了两种打包方式:多python文件打包和含有资源文件的打包方式,具体请戳链接:

用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细)_小康2022的博客-CSDN博客本文一步一步地教你如何用 Pyinstaller 模块将Python程序打包成 exe 文件!这篇教程绝对是全网最全面、最详细的教程!包含四种打包的方法,从简单到复杂依次是:一般打包方法、虚拟环境打包方法、多 Python 文件的打包方法以及包含资源文件的打包方法。你还在等什么?赶紧进来学习吧!https://xiaokang2022.blog.csdn.net/article/details/127585881本篇文章较为老旧,推荐看上面的新文章,绝对是全网最全面最详细的教程!!!

【先来看看几个问题】

一、什么是exe可执行文件?

        exe文件英文全名是executable file,翻译为可执行文件(但它不等于可执行文件),可执行文件包含两种,文件扩展名为.exe的是其中的一种。exe文件可以在Windows平台上直接双击运行!我们通常用的各种软件都是通过快捷方式打开的,而这个快捷方式的目标地址就是这个软件的一个exe文件。

二、为什么要将Python程序打包为exe可执行文件?

        众所周知,Python程序的运行必须要有Python的环境,但是程序编出来是用的,如果是给别人用,而他/她的电脑上又没有Python程序运行的环境怎么办呢?总不能让他/她去安装一个吧?这时我们就要将Python程序打包为exe可执行文件,这样,在Windows平台下,就可以直接运行该程序,不论有没有Python环境。

三、为什么Python程序不能直接运行呢?

        Python是解释性语言,它与C或者C++等语言不同,C或者C++都是要编译再运行的,(编译产生的文件就是exe文件),Python本质上只是对一段文本进行解释,类似于浏览器解析html文档,是不会产生任何exe程序的。

【打包的完整方法】

【步骤01】

【在命令行中用pip工具安装Pyinstaller模块】

pip install Pyinstaller

【步骤02】

【切换命令行的路径到你要打包的Python源文件的文件夹路径下】

【下面是我要打包的Python源文件(散点坐标图.py)及其文件夹路径】

【切换命令行路径】(不是文件路径)

cd 文件夹路径

【步骤03】

【执行Pyinstaller模块的功能】

Pyinstaller -F -w 文件名.py

【等待打包】

【打包成功的标志】

【步骤04】

【到原文件夹找到dist文件夹并打开】

【文件夹里面就是我们要的exe可执行文件了!双击即可运行!】


但是这样打包的Python程序一般会很大,因为它会把一些不必要的东西也打包进去了,(通常可能会达到几百MB的大小😂)这里我们采用创建虚拟环境的方式进行压缩,也就是下面的升级版

【升级版步骤01】

【创建虚拟环境】

conda create -n 虚拟环境名称(自定义) python=版本

【在创建的过程需要回复yes】

【升级版步骤02】

【激活虚拟环境】(我之前就已经创建了一个名为program的虚拟环境)

conda activate 虚拟环境名称

【前面的(base)变成了(program)】

【这个虚拟环境就相当于一个虚拟的Python,它包含的模块没有那么完整(比较少),这样就不会打包不必要的模块】

【虚拟环境pip安装Pyinstaller模块,同上】

【注意:虚拟环境创建后,以后都可以用,不用再重新创建,Pyinstaller模块pip安装后也是】

【同样的操作,打包后的文件大小能缩小(在一般Python程序的打包中不是很明显,对于GUI界面化程序十分明显)】

【升级版步骤03】

【说明:这一步不是必要的】

【打包的程序我们是可以改它的图标的,它默认的图标是】

【更改方式(在创建时才能更改)】

Pyinstaller -F -w -i ico图标文件名 Python文件名

【 到底了哦,原创不易,点个赞呗!】

以上是关于PyQt5 python程序打包成.exe文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将python3.6软件的py文件打包成exe程序

pyqt5 笔记py2exe 实现代码打包exe

python3写好的.py文件打包成exe

Pycharm软件将程序打包成exe文件

python实战===python程序打包成exe

Python的.py文件打包成exe可执行文件