别再问我怎么Python打包成exe了!

作者 | Python进阶者
来源 | Python爬虫与数据挖掘

阅读文本大概需要 10 分钟

前言

也许我们不一定是专业的程序员,但是我们仍然可以通过代码提高我们的效率,尽量少加班,多陪陪媳妇(如果有)。再不行,让代码替我们干着重复的工作,我们有节省出来的时间打游戏不好嘛,是吧,哈哈哈。

但是呢,我们开发的脚本一般都会用到一些第三方包,可能别人也需要用到我们的脚本,如果我们将我们的xx.py文件发给他,他是不能直接用的,他还需要安装python解释器,甚至还要安装我们用的那些第三方包,是不是有点小麻烦?但是我们都知道,PC是可以直接运行exe文件的,这就为我们提供了一个便捷的方式。所以,从看了这个教程以后,这都将成为过去式,打成exe之后,分享即可用。

PS: 如果打包为exe的话,版本尽量选择python3.6+32位版本,因为win64位系统向下兼容32位程序,但是如果不考虑32位系统的话无所谓,直接python64位版本直接打包就可以,只是只能在win64位系统上跑。

安装pyinstaller

首先安装pyinstaller,使用安装命令:pip3 install pyinstaller,如下图所示。

pyinstaller打包机制

我们写的python脚本是不能脱离python解释器单独运行的,所以在打包的时候,至少会将python解释器和脚本一起打包,同样,为了打包的exe能正常运行,会把我们所有安装的第三方包一并打包到exe。

即使我们的项目只使用的一个requests包,但是可能我们还安装了其他n个包,但是他不管,因为包和包只有依赖关系的。比如我们只装了一个requests包,但是requests包会顺带装了一些其他依赖的小包,所以为了安全,只能将所有第三方包+python解释器一起打包。如下图所示。

蓝色表示是安装requests依赖的包,看到了吧!

Pyinstaller打包exe

这里呢,我就拿刚给同事写办公自动化脚本示例一下。源码示例效果,如下图所示。

1、我们来将这个.py的文件打包成一个exe,我们直接cmd切换到这个脚本的目录,执行命令:pyinstaller-F setup.py,如下图所示。

ps: -F参数表示覆盖打包,这样在打包时,不管我们打包几次,都是最新的,这个记住就行,固定命令。

2、执行完毕之后,会生成几个文件夹,如下图所示。

3、在dist里面呢,就有了一个exe程序,这个就是可执行的exe程序,如下图所示。

4、我们把这个setup.exe拖到和setup.py平级的目录,我们来运行一下这个,效果图如下图所示。

5、这样,我们就完成了一个打包工作,如果别人需要,即使没有python环境,他依然可以运行。

6、接下来我们再来打包一个带界面的,这里我用pyqt5写了一个最简单的框架,看一下打包成exe是否能运行成功,效果图如下图所示。

我们可以看到,后面有一个黑洞洞的窗口,这就有点尴尬了,所以,我们的打包命令也要变一下。

7、执行 pyinstaller -F -wsetup.py 多加-w以后,就不会显示黑洞洞的控制台了,这里就不做演示啦!

8、但是我们打包的exe,我们的图标呀,实在是有点丑陋,默认的,没有一点自己的风格,那么,我们应该怎么改一下呢?

执行命令:pyinstaller -F -w-i wind.ico setup.py,如下图所示。

9、默认打包图片,如下图所示。

10、加上 -i 参数之后,如下图所示,会形成一个类似风力发电机的logo图案。

ps:程序路径最好全部都是英文,否则可能会出现莫名其妙的问题

11、到此,我们能用到的pyton打包成exe命令都总结完了

总结命令

Pyinstaller -F setup.py 打包exe

Pyinstaller -F -w setup.py 不带控制台的打包

Pyinstaller -F -i xx.ico setup.py 打包指定exe图标打包

平常我们只需要这三个就好了,足够满足所有需求了。

结语

到这之后呢,python打包成exe基本算是结束了,记得一定要把pip升级成最新版的pip在安装pyinstaller哈。要不然可能会出现莫名奇妙的问题。

不信的话小伙伴们可以自己试试看,多碰碰壁也是可以学到很多的。

end

近期八大热门:

发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片!
盗墓热再起!我爬取了6万条《重启之极海听雷》的评论,发现了这些秘密
用Python一键生成炫酷九宫格图片,火了朋友圈
菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记
Github获8300星!用Python开发的一个命令行的网易云音乐
一道Python面试题,硬是没憋出来,最后憋出一身汗!卧槽!Pdf转Word用Python轻松搞定!教你6招,不错的Python代码技巧!
由 菜鸟学Python 原班人马打造的公众号:程序员GitHub,现已正式上线!
接下来我们将会在该公众号上,为大家分享GitHub上优质的开源神器,程序员圈的趣事,坚持每天一篇原创文章的输出,感兴趣的小伙伴可以关注一下哈!

点这里,领取新手福利
<think>嗯,用户的是Python打包exe后体积过大的题。这应该是很多刚接触PyInstaller或者类似工具的人常遇到的困惑吧。首先我得回忆一下自己之前处理这种情况的经验。可能的原因有几个方面。 首先,Python程序打包exe的时候,PyInstaller默认会把所有依赖的库都打包进去,包括整个Python解释器。特别是如果用到了像PyQt5、NumPy这样的大型库,体积自然会膨胀。比如,一个简单的脚本用PyQt5打包后可能轻松超过100MB,这确实有点大。 接下来,用户可能不知道如何优化。我需要先列出常见的解决方案。比如使用虚拟环境,避免安装不必要的包。有时候全局环境里装了很多测试用的库,打包的时候会被包含进去,导致体积变大。所以建议在干净的虚拟环境中安装仅需要的依赖,然后打包。 然后,使用UPX压缩。PyInstaller支持UPX压缩,可以减小可执行文件的体积。但需要用户下载UPX并配置路径,可能有些用户不知道这个选项,或者遇到路径题。需要详细说明如何操作。 还有,排除不需要的模块。有些库会引入很多子模块,但实际程序可能只用到了其中一部分。比如Pandas可能依赖很多其他库,但实际代码里没有用到,这时候可以通过--exclude-module参数来排除。或者使用--hidden-import来手动添加必须的模块,避免自动检测带入多余内容。 另外,选择合适的打包选项。比如单文件打包虽然方便,但体积会比文件夹打包大,因为需要解压到临时目录。如果用户不介意分发文件夹,可以建议使用文件夹模式,可能体积稍小一些。 还有动态链接库的题,比如如果某些库有动态链接的DLL,是否可以被排除。不过这可能比较复杂,需要具体情况具体分析。 可能用户也会关心其他工具,比如Nuitka,将Python代码编译C,然后再编译二进制文件,这样可能更小。但需要权衡编译的复杂性和兼容性题。 另外,检查是否有大文件或资源被意外打包进去。有时候图片、数据文件等会被包含,需要检查.spec文件中的datas部分,确保只包含必要的文件。 总结下来,解决方案包括:使用虚拟环境、UPX压缩、排除模块、选择打包模式、使用更小的替代库、检查资源文件、升级工具版本等。 需要注意的是,不同情况可能需要不同的策略,比如如果用了机器学习库如TensorFlow,那体积很难大幅减小,可能需要考虑其他方式分发。或者,用户是否了解这些优化步骤的具体操作,是否需要分步骤说明。 最后,要提醒用户,某些防病毒软件可能会误报UPX压缩过的文件,这也是需要注意的地方。</think>Python打包exe后体积过大是常见题,以下是系统化解决方案: 1️⃣ **虚拟环境隔离** - 使用`virtualenv`或`venv`创建纯净环境 - 仅安装必要依赖: ```bash python -m venv myenv source myenv/bin/activate # Linux/Mac myenv\Scripts\activate.bat # Windows pip install pyinstaller 必需库 ``` 2️⃣ **UPX压缩(核心手段)** - 官网下载UPX工具:https://upx.github.io/ - 打包命令添加参数: ```bash pyinstaller --upx-dir=/path/to/upx your_script.py ``` 3️⃣ **模块裁剪优化** ```bash pyinstaller --exclude-module matplotlib --exclude-module pandas your_script.py ``` 4️⃣ **打包模式选择** - 多文件模式更节省空间: ```bash pyinstaller --onedir your_script.py # 默认模式 ``` 5️⃣ **替代方案对比** | 方案 | 优点 | 缺点 | |--------------|---------------------|-----------------------| | PyInstaller | 简单易用 | 默认体积较大 | | Nuitka | 生二进制更小 | 编译时间长,配置复杂 | | cx_Freeze | 支持多平台 | 压缩率较低 | 6️⃣ **高级优化技巧** - 添加.spec文件配置: ```python a = Analysis( ['your_script.py'], binaries=[], datas=[('icon.ico', '.')], # 明确指定资源文件 hiddenimports=[], hookspath=[], excludes=['tkinter', 'unittest'], # 排除非必要模块 win_no_prefer_redirects=False, win_private_assemblies=False ) ``` 7️⃣ **版本管理** - 使用最新工具链: ```bash pip install --upgrade pyinstaller setuptools ``` 💡 **典型体积优化效果** - 基础脚本:从120MB → 优化后15-30MB - GUI程序(如PyQt5):从300MB → 优化后50-80MB - 数据科学项目:需特殊处理(如排除Jupyter依赖) ⚠️ 注意事项: 1. UPX可能被杀毒软件误报 2. 动态加载的模块需手动添加`--hidden-import` 3. 二进制文件兼容性需测试 通过上述组合策略,可显著减小打包体积。若需极致压缩,可结合NSIS等安装包制作工具进行二次压缩。
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值