你是不是也经历过——写了个20行的小脚本,一打包,exe文件直接飙到50MB+?
更离谱的是,用户双击运行后弹出个黑框闪一下就没了……
别急,今天掏心窝子分享3种真正轻量、实用又高效的打包方案,亲测有效!
🧨 为什么PyInstaller这么“胖”?
PyInstaller 默认会把整个Python解释器和依赖全塞进去。
哪怕你只用了os和sys,它也会打包tkinter、sqlite3甚至unittest。
pyinstaller --onefile hello.py
结果?一个Hello World变成40MB起步。
这不是打包,这是搬家!📦
✂️ 方案一:用Nuitka——编译成C级速度,体积直降60%
Nuitka不是打包工具,而是Python源码到C++的编译器。
它能把你的.py直接转成原生二进制,不带Python运行时(可选)。
安装超简单:
pip install nuitka
编译命令:
nuitka --onefile --remove-output --assume-yes-for-downloads hello.py
实测对比(Windows 10 x64):
体积砍掉一半多,启动快如闪电⚡。
缺点?首次编译慢点,但值得!
🧪 方案二:PyInstaller + UPX 压缩——老将新招,性价比之王
UPX是个开源可执行文件压缩器,支持exe、dll等格式无损压缩。
配合PyInstaller,能再压掉30%~50%体积。
先下载UPX(https://upx.github.io),解压到某目录,比如C:\upx。
然后打包时指定:
pyinstaller --onefile --upx-dir C:\upx hello.py
效果立竿见影👇
关键:完全兼容,运行无任何副作用。
适合不想改工具链的老项目,零成本优化!
💡 小贴士:某些杀毒软件会误报UPX压缩的exe,发布前记得测试。
🚀 方案三:用cx_Freeze + 手动剔除冗余——极客专属,极致控制
如果你追求绝对干净,那就上cx_Freeze。
它不像PyInstaller那样“全都要”,而是只打包你显式导入的模块。
安装:
pip install cx_freeze
写个setup.py:
from cx_Freeze import setup, Executable
setup(
name="hello",
version="1.0",
description="Lightweight demo",
executables=[Executable("hello.py")]
)
构建:
python setup.py build
默认生成文件夹,但你可以用Inno Setup或NSIS做成单文件安装包。
优势:你能清晰看到哪些模块被打包了,手动删掉不需要的(比如test、idlelib)。
实测一个带requests的小工具,最终体积仅18MB,比PyInstaller小一半!
🤔 那到底选哪个?
- 不想折腾 → PyInstaller + UPX(最稳)
我自己现在基本全切Nuitka了——启动快、体积小、还能混淆代码,简直不要太爽😎。
📌 最后说句实在话
别再让“Python打包=臃肿”成为用户的槽点。
轻量化不是炫技,是尊重用户带宽和耐心。
花半小时试试这些方案,
你的小工具可能就从“没人敢下”变成“同事追着要”🔥。