Qt for python pyside2/6 使用 PyInstaller打包项目exe

Posted Fu_Lin_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt for python pyside2/6 使用 PyInstaller打包项目exe相关的知识,希望对你有一定的参考价值。

文章目录

说明

使用PyInstaller打包py脚本生成exe,记住一点,千万不要在全局环境 pip install pyinstaller, 使用 pip list 查看是否安装了,如果安装请立即卸载,卸载命令:

pip uninstall pyinstaller

不然很容易一不小心掉坑,后果自负~

初始化虚拟安装环境

创建虚拟环境的目的是为了保持打包环境的干净,避免引入其他的无关的库,导致包过大,或者打包出来的exe不能运行的问题。

不是必须,但是强烈建议

总共三个命令cmd命令提示符中运行。(最好是管理员模式运行)

创建虚拟环境

该命令会创建一个新的干净的文件夹(没有任何三方的依赖库),用于后面python的环境调用。
注意这里python -m venv packenv 或者 python3 -m venv packenv的区别,要看自己电脑的默认python版本而定。(现在python3 默认也是python, 除非装过python2)
执行命令

python -m venv packenv

加载虚拟环境

加载上面创建的虚拟路径的脚本

call packenv\\scripts\\activate.bat

运行后会发现下图绿色的框内的文字,说明虚拟环境进入成功

添加依赖库

如果项目没有引入其他三方库,就只需要调用如下脚本。我们的demo项目就运行这个就够了。

pip3 install PySide2 PyInstaller

如果项目导入了其他三方依赖库,也需要再次安装一次,因为这里是干净的环境,比如 项目中from selenium import webdriver导入了selenium 库,就需要再次运行 pip3 install selenium 安装, 或者 pip3 install PySide2 PyInstaller selenium 一起安装。

开始打包

进入到我们工程的路径

cd D:\\FL\\androidDemo\\QtTestDemo\\SpectraSuite_Python_

打包尝试

可以通过pyinstaller -h查看命令帮助

这里我们直接运行生成exe桌面程序命令(请看下面的说明了再考虑是否执行下面命令)

pyinstaller -w main.py

因为 pyinstaller 默认打包是控制台程序,我们这里加上-w的命令是说明我们是windows桌面程序,说明如下 -w, --windowed, --noconsole Windows and Mac OS X: do not provide a console window for standard i/o. On Mac OS X this also triggers building an OS X .app bundle. On Windows this option will be set if the first script is a ‘.pyw’ file. This option is ignored in *NIX systems.

说明一下, 如果直接加-w生成的exe执行文件,会很难调试,因为没有人可以第一次打包就能成功运行,为了保证能看到问题所在,建议不要加-w,这样会弹出一个黑色调试框,可以看到错误打印,当然还需要辅助的在打包的main.py文件主函数最后一行加入 input("please input any key to exit!"), 不然黑色调试框就会一闪而逝,也没啥用~

如果要调试报错信息把exe拖进cmd命令窗口,回车运行,就能够看到报错信息了。

这样我们就需要执行命令如下:

pyinstaller  main.py

运行结果:


说明打包成功,然后我们切到目录下面去,发现多了几个文件。

build\\dist\\pymain.spec 是多出来的打包生成的文件。

  • 其中build我们不需要使用,可以忽略掉。
  • dist\\ 路径包含了我们生的的exe和各种依赖文件, 可以直接拿去发布
  • pymain.specpyinstaller自动生成的配置文件,后续修改打包配置都可以直接在上面修改。后面会做具体介绍。

好了,我们现在尝试运行dist\\main\\main.exe的exe文件,不出意料的出错了。

因为没有加-w, 所以运行exe会一闪而过,我们需要把exe拖进命令行,然后回车,如下图,就能看到各种报错原因了:

修改好以后,重复将exe拖入cmd,回车看看,是否还有报错,像我,解决了一道有一道提示报错,如下:

各种找不到,自己再去拷贝就好了,出现如下所示提示,就说明可以成功运行,打包给别人了:

没错,就是之前加入的please input any key to exit!, 到了这步,我们就可以去掉这行打印,然后重新生成打包命令,加上-w,记住要把本次打包的dist\\main下面的环境全部复制到一个文件夹,等重新执行打包命令后,会去掉所有自己添加的东西,所以后面直接将exe转移到之前可以运行的环境中去就好了!

main_pack就是我copy的,当然你直接更改main的名称也是一样!

这样程序就能运行起来了!当然了你也发现了,依赖库真多,库真大

啥都没干就241M,真是有点东西啊,那么!下节我们讨论如何瘦身。~~

当然如果是你是用qml开发的,你也会发现,你的qml全部源码曝光了,当然后续我们也会讨论如何解决隐藏qml文件的问题

以上是关于Qt for python pyside2/6 使用 PyInstaller打包项目exe的主要内容,如果未能解决你的问题,请参考以下文章

Qt for python pyside2/6 使用 PyInstaller打包项目exe

如何使变量在 Python(和 Qt)中的函数之外可用

Qt for Python 5.12初体验

Qt for python 实战总目录

Qt for python 实战总目录

Qt for python 实战总目录