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

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

    想请教一下,打包 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  
       1 天前
    @xqher042 其实如果用了 venv/uv/rye 或者其他类似虚拟环境的工具,也可以手动把 venv 一起打包,写个脚本用 venv 里的 python 启动就行
    lone6
        20
    lone6  
    OP
       19 小时 29 分钟前
    @ClericPy 也有搞 web 的想法,奈何不懂前端,这几天在尝试用 cursor 写前端,用 fastapi 搞后端尝试一下
    lone6
        21
    lone6  
    OP
       19 小时 27 分钟前
    @chenbin36255 目前完全没接触过 go ,之前有学习过 java 不知道学习 go 难度大不,而且感觉精力有点不够。目前主要弄一些辅助工作的小脚本,用 python 写起来感觉挺快,挺方便的
    lone6
        22
    lone6  
    OP
       19 小时 26 分钟前
    @xqher042 有看到过 PyStand 这个打包方式,同样没尝试过,抽空试一下
    lone6
        23
    lone6  
    OP
       19 小时 23 分钟前
    @highkay 大佬大佬。好多技术没听过 [哭笑],有推荐的学习教程或者博客吗?了解一下相关知识
    highkay
        24
    highkay  
       18 小时 21 分钟前
    @lone6
    1. 用 conda 创建一个新环境(这里主要看你的用户的系统,如果特别老的话,比如 win7 ,那么可能需要 py3.7.x ,不然的话就是用最新的就好了)
    2. 只需要 pip install 最少的依赖+pyinstaller
    3. 测试运行没问题的话再打包,应该就会比较小了
    visper
        25
    visper  
       16 小时 14 分钟前
    换语言。用 aardio 。如果很简单的话就可以不使用 python 了。如果硬是需要使用 python 有公共的库调用之类。它也支持打包 python.
    sikong31
        26
    sikong31  
       16 小时 10 分钟前
    我放弃 pyinstaller 了,因为一些依赖识别不了要自己加,时间久了会忘记,现在除非版本完全敲定,都是用嵌入式 Python 做环境,安装依赖,直接源码运行,启动速度还快一点。
    lone6
        27
    lone6  
    OP
       15 小时 3 分钟前
    @highkay 感谢大佬
    chenbin36255
        28
    chenbin36255  
       12 小时 33 分钟前
    @lone6 #21 小脚本用 claude 转一下就 OK 了 基本都是拿来即用
    ClericPy
        29
    ClericPy  
       10 小时 49 分钟前
    @lone6 纯 python 生成前端的方式太多了。。。前几天还有 fast-html 之类的,最近不也有 gradio 或者 streamlit 这种无脑生成 UI 的么,生态好到 golang 和 rust 流泪

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