目录
第一步,安装pyinstaller(你可以通过pycharm或cmd安装)
②打包好后,我进入dist发现只有一个exe文件,不添加Platforms和imageformats文件夹和图片资源可以运行吗?
一、资料说明
本人原创资料,写于大三,改于大四,本人py迷,如说的不对,欢迎大家指正!
二、步骤
第一步,安装pyinstaller(你可以通过pycharm或cmd安装)
省略安装方法,pycharm/cmd方式安装,如何安装可参考网络资料
第二步,在工作目录上打cmd,输入以下命令
pyinstaller -F -w -i rocket.ico untitled.py --upx-dir D:\python解释器\upx\upx-4.1.0-win64
- -F表示打包一个文件
- -w表示软件不带命令行
- -i表示icon图标地址,没有可以不打,建议打完整路径,不要像我上面那样
- untitled.py是你的py文件
- upx是压缩打包文件的工具路径(下载地址:https://github.com/upx/upx/releases/tag/v4.1.0),当然upx也可以不下载,只是压缩文件大小罢了
【简略版打包命令】
pyinstaller -F -w untitled.py
第三步,dist查看打包成功的exe文件,并加入两个文件夹
参考路径:
D:\python\Lib\site-packages\PyQt5\Qt5\plugins\platforms下的两个文件夹(这两个文件夹作用:imageformats保证正常显示图片,platforms保证打包发给别人能够顺利启动)
【小结】走到这步,你就可以将dist文件夹打包给你的好朋友用了。但是上图显然有太多dll文件,不太简洁,如果你想将单独的一个exe文件发给你的好友,请看第四步。
第四步,在dist目录全选,右键添加压缩(完美版打包)
【注意】若没有下载好WINRAR,需要提前下载
【注意】此步骤建议"压缩文件名"和"解压后运行"填写一样的内容,即cmd打包生成的exe名字,例如jiemian.exe(我将打包生成的untitled.exe改名为jiemian.exe),上图中abc.exe是WINRAR打包的结果,jiemian.exe是py打包的结果。
我打包出来abc.exe,发给小伙伴,小伙伴可以移动到任何位置使用!别人就看不到你的dll文件和png文件啦!~
三、疑问和总结
①有简单打包方法吗?
有,打包成功后进入dist,有一个exe文件,你把dll文件、Platforms、png等依赖文件黏贴进去,全部文件压缩发给别人,别人也可用,不过别人会看到你的dll文件、png文件,不太简洁。
若您想打包成一个exe文件(不含任何dll文件,须使用winrar方法压缩,方法就是上面的方法)
②打包好后,我进入dist发现只有一个exe文件,不添加Platforms和imageformats文件夹和图片资源可以运行吗?
我怕说的乱,列个表:
不添加Platforms | 不添加imageformats文件夹和图片资源 | |
自己用 | 可以用 | 可以用,但是不显示图片资源 |
发给别人用 | 直接用不了 | 添加Platforms下可以用,不显示图片资源 |
1.因为你的电脑安装了py,系统会根据你设置好的环境变量找到你的第三方库PYQT5,因此你自用可以不粘帖Platforms文件夹进去。
2.这两个文件夹的位置参考
D:\python\Lib\site-packages\PyQt5\Qt5\plugins
3.解释:将图片资源和imageformats文件夹、platforms文件夹移动到exe同级目录中(假如不把图片移进去,无法访问所有图片;不把imageformats移进去,无法访问ico文件;不把platforms文件夹移进去,别人打不开你的exe)
③按照四个步骤走完,能实现什么效果
你将你的exe文件发给你的小伙伴,小伙伴没安装py也可以用,而且是一个单独的exe文件,移动到哪里都可以!
④打包图片不显示怎么办
可以参考我大四时候写的解决方案,效果有用!
⑤第三方库找不到怎么办
多加一句代码,红色的是我虚拟环境下的包的位置:
pyinstaller -F -w -i pdf.ico --paths="F:\pycharm\GUI8\venv\Lib\site-packages" --upx-dir F:\python解释器\upx\upx-4.1.0-win64 untitled.py
⑥'NoneType' object has no attribute 'write'怎么办
原因:py会输出信息,而打包时候没将控制台打包进去
三个方案:
方案一:最简单,打包代码去掉-w,让控制台和exe一同打开。
方案二:将Pyinstaller版本降低(我没试过,网友说的,大家可以试试)
方案三:将标准输出和标准错误流重定向到一个空文件或者其他地方(我也没试过,大家可以试试,本人经历有限)
最后还是带着控制台输出了,大四作(= =欢迎大家补充解决方案)
7.打包闪退问题
【描述】打包成main.exe,双击运行闪退
直接在该目录cmd,输入main.exe运行,命令行会直接输出报错信息
四、总结
我花了不少钱找人反复测试写好的软件,写成本贴,求点个赞吧!
初创时间本人大三,一个小小的笔记,各位大佬轻喷!!~
大四了,再补充一下:升级了系统WIN11后问题超级多,以前打包都是一次过的,emmm,现在又是打包有问题又是被当作病毒禁止掉,我醉了。。。