关于现在的图形界面库打包exe的体积

之前用pyqt写了个小工具,打包出来40多m,找了各种办法,pyinstaller,nuikta,py2exe各种工具各种参数来回试,一度想扔了qt改用tk,后因懒惰作罢,看别人拿c#写的项目就一点点大 就很羡慕。
直到最后我偶尔得知 electron 空项目打包出来exe都得70多m 一下子就觉得,嗯,pyqt还是挺省空间的嘛,我已经尽力了,不去想这个问题了

1 Like

这点真的是,GUI的程序体积真是越来越大,和原生Windows的程序根本没法比。

几年前,有一门国产编程语言,在网上被人黑的理由之一是编译出来的程序体积太大!
有多大呢?一个空窗口竟然有好几百KB,太夸张了~~

1 Like

我之前也是用tkinter写GUI的,然后发现,真的不如用aardio,用易语言也比python强……
我现在都是实际功能使用python或者部分c解决,做好参数相关的接口,GUI归aardio……aardio负责提供图形化界面和结果呈现(实际各类运算还是python
大概像下面那样

如果你真的需要用python写GUI,这个知乎写的很好,可以参考,真的可以缩减体积。

在别的项目上我用过python-embedded打包pytorch的CPU环境然后分发一个巨大的带环境的项目包,这和pyinstaller没有本质的区别,都是打包了整个环境,该装的包一个都跑不了 :cry:

1 Like

那就是模块被整体打包了的原因了……要给模块本身开刀(然而我之前试图精简过pandas和np未果,模块之间相互引用乱糟糟的,完全无从下手……)

我真的感觉不如直接u盘copy一份自己的python环境给需要的人快递过去方便……尤其是我之前打包rembg的时候……打包完成后体积5g,发都不好发过去

你说的是aardio,哈哈。aardio写界面,python写逻辑,这个搭配可以的。

c#小是因为已经安了框架

1 Like

我上个月试了下微软新搞的MAUI,一个空项目生成windows程序直接100mb,项目文件夹则有1gb,吓得我立即从坑里跳出来

3 Likes

主要是c不适合写gui,当时我鼓捣c的gui化的时候,我一个自学的医学生看了半天微软文档也没整明白也搞不懂各种api接口啥的,只能转向现成的积木型编程

cpp没学明白,同学有学cpp的,说可以用qt框架,很简单,但是程序体积巨大,放弃之

c#尝试入门来着,失败。此外,c#需要框架,我不能指望我们学校零几年的电脑,看个ppt都能卡崩的垃圾东西支持.net最新框架

py不用说gui的问题,无论是tkinter还是wxpython原生就不是写gui的料子

js只能大概看懂别人在干啥,自己写不出来,所以election也不能用(体积巨大深恶痛绝)

VB有些太古老了,想尝试点稍微新一点的,至少不要脱节太多

delphi理由同VB(还有一个理由是入门失败)

易语言抛开别的不说,入门极其简单,程序跑的很顺,对新手极其友好没得说,但是写一个报一个,100%报毒,更关键的是解包程序以后会发现里面的很多条目都强制写入了易语言“eyuyan.com”的网址并且不能更改(更何况正版的价格也不是一个普通学生能负担的)

找了半天各种偏门的语言,什么julan(常数据统计不是用来写gui的),R(医学统计常用,但也不是用来干这个的),java(入门失败),rust(正在入门啃圣经,看的头疼……)

最后发现只有aardio用着还可以……
不过aardio也有一些典型特点,像从1开始而不是从0计数,tostring(1234)而不是1234.tostring(),部分符号和主流编程语言不同等等,使用上仍然有些奇怪,不过大部分问题都比较容易解决。
(在此吐槽aardio的官方文档,虽然作者可能确实尽力了,但仍然对新手不太友好。
尤其是部分函数的示例奇怪,重名函数(方法)只能搜索到第一个结果,如(只是个例子)
delete()和deleteex()两个函数
如果在不同的库中,官方文档只能搜索到第一个delete而不能搜索到ex。
部分类型如
var a=io.open(“~/a.txt”,“w+”)
这个a的类型没有解释,文档里也没有给出相应的方法,只能自己手动定位到文件然后自行摸索等等 [不排除他藏的太隐蔽让我找不到的可能] )

2 Likes

Qt框架大是因为里面什么都有,有Qt自己的生命周期管理,容器类之类的一大堆东西,基本上Qt相当于把C++重写了一遍。
如果有兴趣可以试试静态编译Qt,虽然会受开源许可限制,但是程序体积会小不少(但是开发用的sdk体积会大不少,记得是几十个G)
C#因为已经安装了运行库所以程序体积相对较小,MAUI则是默认把.NET运行环境打包在发布程序里了所以体积较大。
electron因为带了一个浏览器所以体积巨大,pyqt不光带了个Qt还带了给python运行环境。
如果真追求程序体积小可以试试c++的imgui。或者.NET配置下不自带运行时,再就是rust语言里的那些新的GUI库,比如egui之类的,生成程序体积很小同时程序性能也很强。

3 Likes

1、用易语言编程,请安装火绒,世界一片和平。其他杀软尤其是360之流…唉,街上的流氓打了你,你就别硬凑他跟前挨揍了,一个黑社会分子,不知道该说它点啥。
2、如果是自用,不一定非要编译吧,用官方的V5.8版,除了不能编译,没其他毛病了。解决一些算法问题、计算问题、甚至一些应用,直接运行源代码也没啥问题吧?就好比python很多人都是不编译使用的。
3、去关心编译后的程序中有易语言官网网址…这个比较那啥点,不知道c啊,c++啊,c#编译后的二进制文件里都写些啥,有没有开发者信息啊?

2 Likes

C,C++,C#里面是没有的,可以用十六进制查看器去看。
记得易语言报毒是因为静态链接。
(易语言缺点挺多的,能不用最好还是不用。)

1、易语言报毒跟静态链接没关系,是它的PE格式比较特殊,很多国外杀软不能识别。包括黄皮白心的360.
2、哪种编程语言都有长处,也有短处,随便一种编程语言单拿出来挑毛病,都能被喷的生活不能自理。所以不能只盯着短处,要看它是不是能够满足用户需求。虽然现在的技术水平来看,易语言已经是一种相当古老的架构了,但就如上面有人说道的,用易语言做前端窗口界面开发真是无比迅捷丝滑,这在某些场景下就足够了,哪个方便用哪个啊,真正做主的是作为使用者的人,而不是作为工具的编程语言。

2 Likes

maui我没能查到换用系统.net环境的方法,为了跨平台,再次老实选择了网页~

不行了啊,大学现在学医的卷死了,再也不是轻松愉快的高中了……
直接放弃cpp,我光想着在cpp里面联想c的指针,导致学到哪哪不对劲……编程真成为了完全的无帮助型爱好………
搞搞python算完,py好歹统计数据回归分析啥的还能用上点,rust搞搞玩玩,别的放弃了

1 Like

我当然是用火绒的,但你不能指望我们学校的电脑也用火绒……这导致我把自己写的小工具往电脑上一插,u盘都没打开就杀光了……
别的当然有开发者信息,但你可以自己调整的,e不能自己调,强制写入自己的网址啥的所以感觉很恶心……

确实,不过确实得说易语言绝对是启蒙第一,中国人最好上手的“类编程语言”之一,甚至说没有之一。

以后懂了肯定就慢慢换掉了,不过易语言的各种提权,系统文件操作,更换桌面壁纸等操作极其方便(这也是导致病毒横行的原因)。有利有弊吧,对初学者而言,前期确实利大于弊,可以很方便的解决一些小问题;后期绝对的弊大于利,各种兼容性问题,高分屏dpi不支持问题,报毒问题,甚至是版权问题啥的会加倍凸显。这时候肯定就要坚定放弃并转向正式编程了

其实我的想法是如果图形界面是绕不过去的,或许可以考虑以网页的形式呈现。之前我想实现一个通用的IOU计算器,使用gui完成还需要支持各个平台,后来codepen上面找了个模板,修改了js部分,一个简单漂亮的IOU计算器就出来了,而且没有依赖,能打开网页就能用。

我的意思不是用Electron这样的框架,而是单网页,任意浏览器都可以打开的,这样省去了打包的烦恼。就是代码容易被别人看到

electron就是这样,但是缺点就是效率有限,而且每个软件都要集成一个浏览器内核,对用户的硬盘和手机存储提出了巨大的考验…