Python_用pyinstaller打包成exe

使用Python编写的程序想要分享给他人,最佳方式是将其打包成exe。pyinstaller作为简单实用的打包工具,是不错的选择。本文记录了在pyinstaller打包过程中遇到的32/64位兼容性、Python版本问题,以及pyqt5依赖问题的解决办法,包括更换Python 32位环境、解决pyqt5缺失文件等,帮助开发者顺利完成打包过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景:写好一个python程序,想发给别人秀一秀,如果还要让对方 下载python、配置环境变量、安装第三方包,那估计别人也不会想看你的东西了(哭笑不得)。所以,当然是要打包成exe啦。


打包成exe有py2exe、pyinstaller等几种方式,pyinstaller算是简单又实用的了。
我是参考此链接的http://blog.youkuaiyun.com/MrLevo520/article/details/51840217 点赞数很多,应该可信,,然而,还是遇到了好多问题,在此罗列一下遇到的问题:

首先,我一开始没注意到这一句“如果要32/64位通吃,就要在python 32位环境下(不是win32位)编译打包exe,才能在32/64位成功。“ 我的python是64位的,卸了重装32位。

其次,文章里说
这里写图片描述
我一开始试了第二个,官网的,据说是已经支持了py3.6了,但我试过,还是不行,所以后来我又卸了3.6,装了3.5。。。建议各位选择第一个,github强于官网啊!

再来,打包过程中又碰到了pyqt的一些问题,问题具体描述忘记了。大概原因是,原来python3.5自带了pyqt5,而这个自带的pyqt5又不完善,很多该有的文件夹和文件都没有。。。所以我只好又去下载了pyqt5的exe,安装(随你装在哪)后,把需要的文件夹拖到python-lib-sitepackages-pyqt5文件夹下。目前我的pyqt5文件夹是这样的,你看看你的还缺什么

### 减小Pyinstaller生成exe文件大小的方法 使用PyinstallerPython代码打包exe文件时,生成的文件可能较大。以下是几种可以减小文件大小的方法及其原因分析: #### 1. 使用`--onefile`模式与`--onedir`模式的选择 在Pyinstaller中,`--onefile`选项会将所有依赖项压缩到一个单独的可执行文件中,而`--onedir`选项会将依赖项打包到一个目录中[^1]。虽然`--onefile`看起来更简洁,但它的文件通常更大,因为它需要包含解压和运行时环境。如果目标是减小文件大小,可以选择`--onedir`模式。 #### 2. 排除不必要的模块 通过`--exclude-module`参数可以排除一些不需要的模块。例如,如果你的程序没有用到Tkinter或numpy等大型库,可以通过以下命令排除它们: ```bash pyinstaller --exclude-module=tkinter --exclude-module=numpy your_script.py ``` 这种方法可以显著减少最终文件的大小[^2]。 #### 3. 使用UPX压缩工具 UPX(Ultimate Packer for eXecutables)是一个免费的可执行文件压缩工具,可以有效减小exe文件的大小。首先需要安装UPX,然后在Pyinstaller命令中添加`--upx-dir`参数指定UPX路径,并启用`--upx`选项: ```bash pyinstaller --upx-dir=path_to_upx --upx=9 your_script.py ``` UPX通过压缩可执行文件中的数据部分来实现文件大小的减小[^3]。 #### 4. 调整spec文件配置 Spec文件是Pyinstaller的核心配置文件,可以通过修改它来优化打包过程。例如,可以手动调整`excludes`列表以排除更多不必要的模块,或者设置`compressed=True`以启用压缩功能: ```python a = Analysis(['your_script.py'], pathex=['.'], excludes=['tkinter', 'numpy'], compressed=True) ``` #### 5. 使用Nuitka替代Pyinstaller Nuitka是一个可以将Python代码直接编译为C++代码并生成二进制文件的工具。相比于Pyinstaller,Nuitka生成的文件通常更小且运行速度更快。然而,Nuitka的学习曲线较高,且支持的Python特性可能不如Pyinstaller全面[^2]。 #### 6. 分析依赖项 有时,Pyinstaller可能会自动包含一些未使用的依赖项。可以使用`pydeps`工具分析Python脚本的依赖关系,找出并移除不必要的模块: ```bash pydeps your_script.py --show-depends ``` ### 示例代码 以下是一个使用UPX和排除模块的完整命令示例: ```bash pyinstaller --onefile --exclude-module=tkinter --exclude-module=numpy --upx-dir=/path/to/upx --upx=9 your_script.py ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值