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 · 2 天前 · 2283 次点击

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

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

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

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

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

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

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

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

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

    反正平时多尝试吧,大部分用户的一致性看法就是:能 web 就别 Client ,没空升级。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3048 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:16 · PVG 22:16 · LAX 06:16 · JFK 09:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.