惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
Kaspersky official blog
云风的 BLOG
云风的 BLOG
IT之家
IT之家
T
The Blog of Author Tim Ferriss
C
Check Point Blog
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
G
Google Developers Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
F
Fortinet All Blogs
D
DataBreaches.Net
The Register - Security
The Register - Security
L
LINUX DO - 最新话题
W
WeLiveSecurity
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V2EX - 技术
V2EX - 技术
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
小众软件
小众软件
F
Full Disclosure
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
I
InfoQ
S
Secure Thoughts
TaoSecurity Blog
TaoSecurity Blog
MyScale Blog
MyScale Blog
AI
AI
Recent Announcements
Recent Announcements
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CXSECURITY Database RSS Feed - CXSecurity.com
V
Vulnerabilities – Threatpost
NISL@THU
NISL@THU
SecWiki News
SecWiki News
Cisco Talos Blog
Cisco Talos Blog
H
Heimdal Security Blog
Y
Y Combinator Blog
N
News | PayPal Newsroom
P
Privacy International News Feed
美团技术团队
Attack and Defense Labs
Attack and Defense Labs
D
Docker
PCI Perspectives
PCI Perspectives
Webroot Blog
Webroot Blog
A
About on SuperTechFans
A
Arctic Wolf
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
MongoDB | Blog
MongoDB | Blog
T
Threat Research - Cisco Blogs

博客园 - weipt

终于!我造了个「AI代驾」级别的AutoBuilder,一键干掉80%的重复CRUD工作 OpenClaw 配置飞书机器人完整指南:从零到每天定时推送天气 国产数据库私有化部署实战:PolarDB for PostgreSQL 免费容器版踩坑记 发票打印还在花钱?这款免费小工具,A4纸一半大小、自动排版,真香! 🔥 自己写的FBX转3D Tiles工具,免费!还能当模型浏览器用 相同代码在360浏览器能显示,在edge提示webgl不支持,edge下都最新的内核。 什么是技术架构、数据架构、业务架构、应用架构和代码架构? 2026无人机新规正式施行!各位飞手赶紧收藏 谈谈EF的两种模式 谈谈EF Core 微软官方的 ORM(对象关系映射)框架 Next.js和blazor server比较开发网站哪个好 Blazor Server和 Blazor WebAssembly区别 关于vue项目中cesium的地图显示问题 关于顺丰退出抖音电商退货业务事件的分析 在WINDOWS上创建NTP授时服务器,并验证是否可用 这样的算作“全栈技术”吗? 大疆上云APIdemo打包配置 用nssm将minio和srs注册成服务 LoRa定位技术和蓝牙AoA定位技术的关系 Mysql查询工具,你还用navcat吗? jar注册为服务的方式 nginx怎么样配置rtmp推流服务器 时间戳和时间格式互转
使用pyinstaller打包的exe文件太大,怎么办
weipt · 2026-02-05 · via 博客园 - weipt

PyInstaller 提供了许多命令行选项,可以帮助我们进一步优化打包文件的大小。

1. --onefile vs --onedir

  • --onefile (默认 -F): 将所有文件打包成一个独立的 .exe 文件。
    • 优点: 分发方便,用户只需运行一个文件。
    • 缺点: 启动速度可能较慢,且文件解压到临时目录时会占用更多空间,总大小有时会略大。
  • --onedir (默认): 将所有文件打包到一个文件夹中,其中包含主 .exe 文件和所有依赖库。
    • 优点: 启动速度快,调试方便。
    • 缺点: 需要分发整个文件夹,不方便。

对于追求最小体积和快速启动的场景,--onedir 可能是一个更好的选择,尽管它需要分发一个文件夹。但通常,为了方便,我们还是会选择 --onefile,然后配合其他优化选项。

2. --noconsole (默认 -w)

如果你打包的是一个带有图形用户界面(GUI)的应用程序,或者不希望在运行时弹出命令行窗口,可以使用 --noconsole 选项。这有时也能稍微减小文件大小。

pyinstaller --onefile --noconsole my_app.py

3. --strip

这个选项会尝试从可执行文件和库中移除调试符号表(debug symbols)。这可以显著减小文件大小,但会使调试变得困难。在发布最终版本时非常有用。

pyinstaller --onefile --noconsole --strip my_app.py

4. --exclude-module <module_name>

如果你的程序不使用某个标准库或第三方库的特定模块,但 PyInstaller 错误地将其包含进来,你可以使用此选项将其排除。例如,如果你的应用是纯命令行,不需要 tkinter

pyinstaller --onefile --noconsole --exclude-module tkinter my_app.py

注意: 确保你排除的模块确实不会被你的程序或其依赖所使用,否则会导致运行时错误。

5. --paths <path> (默认 -p)

如果 PyInstaller 无法找到某个模块,或者你希望它在特定目录中查找模块,可以使用 --paths 添加额外的搜索路径。虽然这通常不是减小大小的直接方法,但它能帮助解决依赖缺失问题。

6. --upx-dir <UPX_path> / UPX 压缩

UPX (Ultimate Packer for eXecutables) 是一个免费的、开源的、高度可压缩的可执行文件打包器。它可以将 .exe.dll 等文件进行压缩,从而大大减小文件大小。PyInstaller 能够与 UPX 无缝集成。

使用步骤:

  1. 下载 UPX: 访问 UPX 官方网站 https://upx.github.io/,下载与你操作系统对应的最新版本 UPX。
  2. 解压 UPX: 将下载的压缩包解压到一个容易记住的路径,例如 C:\Users\YourUser\upx-3.96-win64
  3. 在 PyInstaller 中使用 UPX: 在运行 pyinstaller 命令时,通过 --upx-dir 选项指定 UPX 的路径(UPX 可执行文件所在的目录)。
    # 假设 UPX 解压在 C:\Users\YourUser\upx-3.96-win64 目录下 pyinstaller --onefile --noconsole --strip --upx-dir C:\Users\YourUser\upx-3.96-win64 my_app.py
    如果将 upx.exe 的路径添加到系统环境变量 PATH 中,则可以直接使用 --upx-dir . 或不指定该选项(PyInstaller 会自动尝试查找)。

UPX 的注意事项:

  • 压缩率极高: UPX 可以将文件大小减小 50% 甚至更多。
  • 潜在的杀毒软件误报: 由于 UPX 改变了可执行文件的结构,一些杀毒软件可能会将其误报为病毒或恶意软件。这是 UPX 的常见副作用,但通常是误报。如果遇到这种情况,可以尝试将文件添加到杀毒软件的白名单中,或者在对安全性要求极高的分发场景中避免使用 UPX。