Python 用 Gooey 库编写了一个最最简单的调用外部命令行的界面程序,打包后体积 30MB,怎么再次降低,最低能到多少 MB? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Apol1oBelvedere
V2EX    Python

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

  •  
  •   Apol1oBelvedere 323 天前 2548 次点击
    这是一个创建于 323 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    • 代码 40 行,最简单的调用外部一个命令行的程序;
    • 打包命令 pyinstaller --onefile --noconsole --exclude-module tkinter --upx-dir D:\Temp\py1 D:\Temp\py1\main.py ,生成的程序 31.3MB 。
    • 用 Gooey 做界面之前用 AutoIt 做的一个类似界面 EXE 才几百 KB 。

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

    19 条回复    2024-11-27 19:52:03 +08:00
    ghostben
        1
    ghostben  
       323 天前
    https://www.zhihu.com/question/48776632/answer/2336654649 lz 可以参考一下这个。

    ps 个人研究了很久,如果真想做 10m 以下的小工具啥的,用 python 其实会很麻烦,不如换个技术栈
    Leon6868
        2
    Leon6868  
       323 天前
    几乎不可能小于 10mb ,你可以试试 Nuitka 但是我觉得应该帮助不大

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

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

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

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

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

    30m 3m 才是有意义的, 但显然做不到
    Apol1oBelvedere
        12
    Apol1oBelvedere  
    OP
       322 天前
    @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
        13
    lizhenjia569  
       322 天前
    这个取决于 gooey 的依赖库大不大,纯 py 脚本最小可以做到 5MB ,参考韦老师的这个项目: https://github.com/skywind3000/PyStand
    CassianVale
        14
    CassianVale  
       322 天前
    用 C++的话体积就能降下来了
    PTLin
        15
    PTLin  
       322 天前
    你说你这个挺简单的,有研究降低打包大小的时间,怕不是早就重写完了
    zhmouV2
        16
    zhmouV2  
       322 天前
    问个题外话 python 各种打包工具有类似 treeshaking 的机制吗?感觉好像只要 import 就把所有 lib 引入进去了
    iorilu
        17
    iorilu  
       321 天前
    @zhmouV2 没有的, python 又不用编译, 不可能扫描全部代码分析的

    要用就是整个包打进去
    Apol1oBelvedere
        18
    Apol1oBelvedere  
    OP
       317 天前
    @ghostben 尝试了一下 Koda 做界面+WindSurf 智能出代码+Autoit3 编译,时间短效率高界面还行。甚至于编写一个 VC 界面程序也是可能的。
    Apol1oBelvedere
        19
    Apol1oBelvedere  
    OP
       316 天前
    @Apol1oBelvedere #18 更新,找到更强的解决办法:Visual Studio (做界面)和 WindSurf ( AI 生成代码)配合,公用一个项目文件夹,基本无缝完成简单项目,又快又好。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3880 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 04:12 PVG 12:12 LAX 21:12 JFK 00:12
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86