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 · 32 天前 · 1884 次点击
    这是一个创建于 32 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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  
       32 天前
    https://www.zhihu.com/question/48776632/answer/2336654649 lz 可以参考一下这个。

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

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

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

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

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

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

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

    要用就是整个包打进去
    Apol1oBelvedere
        18
    Apol1oBelvedere  
    OP
       26 天前
    @ghostben 尝试了一下 Koda 做界面+WindSurf 智能出代码+Autoit3 编译,时间短效率高界面还行。甚至于编写一个 VC 界面程序也是可能的。
    Apol1oBelvedere
        19
    Apol1oBelvedere  
    OP
       25 天前
    @Apol1oBelvedere #18 更新,找到更强的解决办法:Visual Studio (做界面)和 WindSurf ( AI 生成代码)配合,公用一个项目文件夹,基本无缝完成简单项目,又快又好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   968 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:13 · PVG 03:13 · LAX 11:13 · JFK 14:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.