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
lone6
V2EX  ›  Python

Python 打包 exe 方案

  •  
  •   lone6 · 2025-01-04 15:23:25 +08:00 · 4946 次点击
    这是一个创建于 369 天前的主题,其中的信息可能已经有所发展或是发生改变。

    平时会开发一些小脚本,在工作中使用

    想请教一下,打包 exe 的方案有哪些?

    目前在使用 pyinstaller ,但是打包过程比较慢,打包后的 exe 感觉也挺大的

    有没有更好的方案或者优化教程?

    35 条回复    2025-01-22 14:20:20 +08:00
    Nehcknarf
        1
    Nehcknarf  
       2025-01-04 15:28:51 +08:00
    Pyinstaller 还是最方便的,可以写个 shell 脚本去剔除被一并打包的无用动态库,加入 --strip 选项也能减小一定的体积。
    另外可以试试 Nuitka ,虽然我也没用过
    NoOneNoBody
        2
    NoOneNoBody  
       2025-01-04 15:31:30 +08:00
    大是肯定的,要把 python 和三方包也打包进去
    如果比较简单,没有 import 三方包,可以让 AI 转为编译语言再编译 exe ,字节就很小
    yoiteshaw
        3
    yoiteshaw  
       2025-01-04 15:35:24 +08:00   ❤️ 2
    我习惯用 nuitka ,我觉得运行速度会快很多,打包的 exe 大不重要,用户运行起来慢更影响体验。
    coderluan
        4
    coderluan  
       2025-01-04 16:00:16 +08:00
    这种可以不打包吧,直接写个 bat 下载个 python 再设置下环境变量?
    lone6
        5
    lone6  
    OP
       2025-01-04 16:41:08 +08:00
    @coderluan 有的工具会发给同事用,所以想打包 exe
    lone6
        6
    lone6  
    OP
       2025-01-04 16:42:30 +08:00
    @yoiteshaw 有道理,回头用 nuitka 试试
    lone6
        7
    lone6  
    OP
       2025-01-04 16:43:12 +08:00
    @Nehcknarf 剔除无用动态库这块没接触过,有推荐的教程吗?
    NewYear
        8
    NewYear  
       2025-01-04 18:12:03 +08:00
    pxe ,除了绕开 Windows ,其他都很好。摊手表情
    NewYear
        9
    NewYear  
       2025-01-04 18:12:33 +08:00
    pxe ,除了不支持 Windows ,其他都很好。摊手表情
    ClericPy
        10
    ClericPy  
       2025-01-04 19:19:04 +08:00   ❤️ 1
    https://github.com/ClericPy/nuitka_simple_gui

    nuitka 就挺好了,基本不用动脑子,跳过三方库的编译提高速度,单文件会生成缓存目录。

    如果对方有 Python 解释器,zipapps 打包 pyz 带依赖或者惰性安装依赖,比连解释器一起打包省点空间

    虽然如果我去弄,大概率搞个 web 。。。
    v0rtix
        11
    v0rtix  
       2025-01-04 20:01:54 +08:00
    小脚本不要用 python 了
    用 go 打包最方便 而且体积还小
    stobacco
        12
    stobacco  
       2025-01-04 21:01:27 +08:00
    go-wails 写这种小工具很在行,gui 用前端技术就行
    xqher042
        13
    xqher042  
       2025-01-04 21:15:18 +08:00
    python 嵌入式打包,打包新姿势,打包速度比 pyinstaller 还快哦 - 快给大忙人让泳道的文章 - 知乎
    https://zhuanlan.zhihu.com/p/691339803

    之前看到感觉不错的方式,但还没测试过
    ETiV
        14
    ETiV  
       2025-01-04 21:29:59 +08:00 via iPhone
    嫌 exe 大,拿 upx 压缩一下,立竿见影
    lxxiil
        15
    lxxiil  
       2025-01-04 21:31:55 +08:00 via iPhone
    rpa 类的 Python 程序的话可以用蓝印 rpa
    taoqian52
        16
    taoqian52  
       2025-01-04 21:39:55 +08:00
    nuitka 可以在打包的时候,选择不打包什么库进去,从而减小体积,但是要运行这个软件的人本地有环境并且装了那些库
    raycool
        17
    raycool  
       2025-01-05 10:26:44 +08:00
    nuitka 用起来不错。
    highkay
        18
    highkay  
       2025-01-05 20:05:45 +08:00
    pyinstaller 的兼容性,尤其是 windows 的是目前所有方案中最好的。至于大的问题是因为你当前的 runtime 下面无关的依赖太多了,似乎也没有按照 requiements 裁剪的能力(我理解这里要考虑一些动态加载的能力,不能完全根据 import 来加载),所以我一般是用 conda 单独维护一个打包环境。
    zhzy
        19
    zhzy  
       2025-01-06 04:29:57 +08:00
    @xqher042 其实如果用了 venv/uv/rye 或者其他类似虚拟环境的工具,也可以手动把 venv 一起打包,写个脚本用 venv 里的 python 启动就行
    lone6
        20
    lone6  
    OP
       2025-01-06 10:22:49 +08:00
    @ClericPy 也有搞 web 的想法,奈何不懂前端,这几天在尝试用 cursor 写前端,用 fastapi 搞后端尝试一下
    lone6
        21
    lone6  
    OP
       2025-01-06 10:25:23 +08:00
    @chenbin36255 目前完全没接触过 go ,之前有学习过 java 不知道学习 go 难度大不,而且感觉精力有点不够。目前主要弄一些辅助工作的小脚本,用 python 写起来感觉挺快,挺方便的
    lone6
        22
    lone6  
    OP
       2025-01-06 10:26:27 +08:00
    @xqher042 有看到过 PyStand 这个打包方式,同样没尝试过,抽空试一下
    lone6
        23
    lone6  
    OP
       2025-01-06 10:29:00 +08:00
    @highkay 大佬大佬。好多技术没听过 [哭笑],有推荐的学习教程或者博客吗?了解一下相关知识
    highkay
        24
    highkay  
       2025-01-06 11:31:28 +08:00
    @lone6
    1. 用 conda 创建一个新环境(这里主要看你的用户的系统,如果特别老的话,比如 win7 ,那么可能需要 py3.7.x ,不然的话就是用最新的就好了)
    2. 只需要 pip install 最少的依赖+pyinstaller
    3. 测试运行没问题的话再打包,应该就会比较小了
    visper
        25
    visper  
       2025-01-06 13:38:01 +08:00
    换语言。用 aardio 。如果很简单的话就可以不使用 python 了。如果硬是需要使用 python 有公共的库调用之类。它也支持打包 python.
    sikong31
        26
    sikong31  
       2025-01-06 13:41:58 +08:00
    我放弃 pyinstaller 了,因为一些依赖识别不了要自己加,时间久了会忘记,现在除非版本完全敲定,都是用嵌入式 Python 做环境,安装依赖,直接源码运行,启动速度还快一点。
    lone6
        27
    lone6  
    OP
       2025-01-06 14:48:43 +08:00
    @highkay 感谢大佬
    v0rtix
        28
    v0rtix  
       2025-01-06 17:19:26 +08:00
    @lone6 #21 小脚本用 claude 转一下就 OK 了 基本都是拿来即用
    ClericPy
        29
    ClericPy  
       2025-01-06 19:03:00 +08:00
    @lone6 纯 python 生成前端的方式太多了。。。前几天还有 fast-html 之类的,最近不也有 gradio 或者 streamlit 这种无脑生成 UI 的么,生态好到 golang 和 rust 流泪

    反正平时多尝试吧,大部分用户的一致性看法就是:能 web 就别 Client ,没空升级。。。
    lone6
        30
    lone6  
    OP
       2025-01-07 08:27:26 +08:00
    @ClericPy 我去了解一下这几个东西。

    感觉上,确实是这样,目前已经在用 cursor 写前端页面了,做了几个页面,效果还不错
    numoone
        31
    numoone  
       363 天前
    @lone6 我也有相同的问题,你的前端都用到啥框架?
    lone6
        32
    lone6  
    OP
       362 天前
    @numoone 前端纯靠 cursor 生成了,效果不错,实现了我想要的。用的 vue 框架
    linxiaojialin
        34
    linxiaojialin  
       352 天前
    pyinstaller 打包很快啊,你用啥框架写的工具?界面用 tkinter 就可以了,一个小工具 exe 几 M ,最多十几 M
    lone6
        35
    lone6  
    OP
       351 天前
    @linxiaojialin 没有使用框架,就一个简单的 py 文件,打包后 30M+
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5337 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:06 · PVG 14:06 · LAX 22:06 · JFK 01:06
    ♥ Do have faith in what you're doing.