Python 用 Gooey 库编写了一个最最简单的调用外部命令行的界面程序,打包后体积 30MB,怎么再次降低,最低能到多少 MB?

2024-11-20 22:15:02 +08:00
 Apol1oBelvedere

Python 用 Gooey 库编写了一个最最简单的调用外部命令行的界面程序,打包后体积 30MB ,怎么再次降低,最低能到多少 MB ?

如果降不下去体积到几兆,就换 Winform 或者 AutoIt 去做了。

2769 次点击
所在节点    Python
19 条回复
ghostben
2024-11-20 22:24:06 +08:00
https://www.zhihu.com/question/48776632/answer/2336654649 lz 可以参考一下这个。

ps 个人研究了很久,如果真想做 10m 以下的小工具啥的,用 python 其实会很麻烦,不如换个技术栈
Leon6868
2024-11-20 22:25:47 +08:00
几乎不可能小于 10mb ,你可以试试 Nuitka 但是我觉得应该帮助不大

Python 写 GUI 就是为了方便嘛,大小肯定不占优势的
SenLief
2024-11-21 08:13:49 +08:00
python 打包不占优势,如果单文件还是 go
bler
2024-11-21 09:07:43 +08:00
不是编译型编程语言,打包后都得带上自身语言的虚拟机的,编译型语言,编译的时候就转化成二进制机器码了,像 python 这种编程语言,开发确实快,但是由于不是直接编译成二进制机器指令,需要带上自身虚拟机肯定大,你只能去找 c ,rust 之类的编程语言去看看,能不能找到好用的库,简化你的编写逻辑
bler
2024-11-21 09:09:55 +08:00
好像 go 也可以,直接编译成二进制,go 现在也挺火的,工具库应该也多,可以试试
bler
2024-11-21 09:15:00 +08:00
了解了一下 go ,虽然是编译成二进制文件,但是它依赖一个 runtime 运行时的东西,在我看来其实也是属于虚拟机的范畴,只不过相比于 python 这种,应该要小一点,你可以试试打包一下,看看文件大不大
sharkyc
2024-11-21 09:40:52 +08:00
python 打包等于带了一套运行环境进去 只能再删删包含的库 降到 10MB 下很难
iorilu
2024-11-21 10:00:53 +08:00
python 无论怎么弄都要自带一套 python 解释器, 标准库一套东西, 至少 10 几 M

再加上你开发用的图形库等, 图形库一般不会小, 几十 M 很正常

想要小最后换 rust 或 go 等, 当然不考虑跨平台就用微软的
skallz
2024-11-21 10:10:05 +08:00
想要体积小考虑 tauri 这种吧,python 小不了
ltaoo1o
2024-11-21 10:37:44 +08:00
https://github.com/tiny-craft/tiny-rdm
这个项目用的 wails ,打包后只有 10MB 。

我自己用过的
1 、tauri 打包后有 12MB 左右
2 、flutter 打包后有 24MB 左右

逻辑都非常简单,可以看作是「最小体积」
jjx
2024-11-21 12:19:55 +08:00
老实说, 既然用 python 了
30m 25m 20m 这样的差别从技术角度来说要追求的
但实际用途上完全没有意义, 30m 20m 都可以视为一样

30m 3m 才是有意义的, 但显然做不到
Apol1oBelvedere
2024-11-21 13:26:01 +08:00
@ghostben 按照教程发现三个库打包进去了,Gooey 和 wx 这两个用于界面删不了,NumPy 26MB 删除。配合 pipenv 命令,最后多番尝试打包出来 20.2 MB 。用如下的命令:
pyinstaller --onefile --noconsole --hidden-import=Gooey --exclude-module numpy D:\Temp\py1\main.py //20.2MB

@bler #4 @iorilu 已在尝试用 Winforms 去做了。
lizhenjia569
2024-11-21 13:43:03 +08:00
这个取决于 gooey 的依赖库大不大,纯 py 脚本最小可以做到 5MB ,参考韦老师的这个项目: https://github.com/skywind3000/PyStand
CassianVale
2024-11-21 14:28:38 +08:00
用 C++的话体积就能降下来了
PTLin
2024-11-21 16:32:22 +08:00
你说你这个挺简单的,有研究降低打包大小的时间,怕不是早就重写完了
zhmouV2
2024-11-21 18:09:11 +08:00
问个题外话 python 各种打包工具有类似 treeshaking 的机制吗?感觉好像只要 import 就把所有 lib 引入进去了
iorilu
2024-11-22 18:23:28 +08:00
@zhmouV2 没有的, python 又不用编译, 不可能扫描全部代码分析的

要用就是整个包打进去
Apol1oBelvedere
2024-11-26 20:34:09 +08:00
@ghostben 尝试了一下 Koda 做界面+WindSurf 智能出代码+Autoit3 编译,时间短效率高界面还行。甚至于编写一个 VC 界面程序也是可能的。
Apol1oBelvedere
2024-11-27 19:52:03 +08:00
@Apol1oBelvedere #18 更新,找到更强的解决办法:Visual Studio (做界面)和 WindSurf ( AI 生成代码)配合,公用一个项目文件夹,基本无缝完成简单项目,又快又好。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1091331

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX