pyinstaller 打包PySide6成exe手动精简过程

相信很多朋友对QT程序的依赖问题脑壳痛,我使用pyside6写的记事本只有基本的文件读取修改,设置,正则以及简单的python语法高亮等功能,使用pyinstaller打包后体积达到了夸张的110M - -!使用innosetup打包后体积还有30m81a412a8f93a4083bcb1138be16e25ac.jpeg

接下来尝试了各种方法,什么虚拟环境打包,什么UPX压缩,都放弃了,原因是因为我偏好pyinstaller的-D选项,启动速度贼快,而UPX压缩会损伤记事本的启动速度,这是无法接受的,甚至在.spec文件中的exclude(剔除)选项中,模块名字排列了几十个,也仅仅使体积减少了10M而已,最终决定进入dist目录下的PySide6手动精简,我使用最原始,最笨,最繁琐,也是目前最好的方法:
进入dist\JQEdit\_internal,把文件按大小排列,先把文件后缀改成.bak,再启动pyside6写的记事本,如果没报错,并且外观与启动速度没有损失就可以把这个文件删除了,报错了就去掉.bak改回文件名,保留它!
以记事本为例,像那些什么openssl.dll,OpenGL.dll ,Network*.dll,VCRRUNTIME.dll,virtualkeyboard.dll完全用不到,统统格删勿论,目录结构不要破坏,只删文件,像translations里面的文件我是统统删除,因为我自己有翻译文件,还有plugins目录下,很多都可以删除,保留目录结构。一路下来,记事本体积从100多M缩小到了46M,哈哈哈哈。并且启动速度与其他功能完全没有削弱

edc5700ad0aa45a08079140e40e18786.png


使用innosetup制作成安装包后,体积从30M缩小到15M,嘻嘻


9cdbd0b99c9f4ebdbd00a55e6444bf72.png

人生就是不断的优化,- -!


f87c1928f43f4de783514c2598bb3ae1.png

然后,下次不需要手动了,一步到位:
 

@echo off
REM 检查系统是否安装 Python
python --version > nul 2>&1
IF %ERRORLEVEL% NEQ 0 (
    echo Python 未安装,请先安装 Python。
    pause
    exit /b
)

REM 检查系统是否安装 PyInstaller
pyinstaller --version > nul 2>&1
IF %ERRORLEVEL% NEQ 0 (
    echo PyInstaller 未安装,请先安装 PyInstaller。
    pause
    exit /b
)

REM 检查系统是否安装 Inno Setup
if exist "C:\Program Files (x86)\Inno Setup 6\Compil32.exe" (
    echo Inno Setup 已安装。
) else if exist "C:\Program Files\Inno Setup 6\Compil32.exe" (
    echo Inno Setup 已安装。
) else (
    echo Inno Setup 未安装,请先安装 Inno Setup。
    pause
    exit /b
)

REM 检测完毕,开始打包exe

echo python,pyinstaller已经安装,即将打包成exe...
python -m venv venv
echo 创建虚拟环境
call venv\Scripts\activate
echo 激活虚拟环境成功
timeout /t 1 > nul
:: pyinstaller -D -w --icon="resources\JQEdit.ico" --add-data="resources\*;resources" JQEdit.py
pyinstaller --clean JQEdit.spec
echo 打包完成
timeout /t 2 > nul
echo 开始执行精简程序:
timeout /t 1 > nul
set count = 0
del dist\JQEdit\_internal\libcrypto-3.dll
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\libcrypto-3.dll
set count = 0
del dist\JQEdit\_internal\select.pyd
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\select.pyd
del dist\JQEdit\_internal\unicodedata.pyd
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\unicodedata.pyd
del dist\JQEdit\_internal\VCRUNTIME140.dll
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\VCRUNTIME140.dll
del dist\JQEdit\_internal\VCRUNTIME140_1.dll
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\VCRUNTIME140_1.dll
del dist\JQEdit\_internal\_bz2.pyd
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\_bz2.pyd
del dist\JQEdit\_internal\_decimal.pyd
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\_decimal.pyd
del dist\JQEdit\_internal\_hashlib.pyd
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\_hashlib.pyd
del dist\JQEdit\_internal\_lzma.pyd
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\_lzma.pyd
del dist\JQEdit\_internal\_socket.pyd
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\_socket.pyd
del dist\JQEdit\_internal\PySide6\MSVCP140.dll
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\PySide6\MSVCP140.dll
del dist\JQEdit\_internal\PySide6\MSVCP140_1.dll
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\PySide6\MSVCP140_1.dll
del dist\JQEdit\_internal\PySide6\MSVCP140_2.dll
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\PySide6\MSVCP140_2.dll
del dist\JQEdit\_internal\PySide6\opengl32sw.dll
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\PySide6\opengl32sw.dll
del dist\JQEdit\_internal\PySide6\Qt6Network.dll
set /a count+=1
echo 已经删除:dist\JQEdit\_internal\PySide6\Qt6Network.dll
del dist\JQEdit\_internal\PySide6\Qt6OpenGL.dll
set /a count+=1
echo 已经删除:dist\JQE
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值