程序打包与发布

概述

在本课程中,我们将学习如何将PyQt程序打包成可执行文件,这样其他用户就可以直接运行你的程序,而不需要安装Python和相关依赖。

提示:本教程使用PyInstaller工具进行打包,它是最流行和最易用的Python打包工具之一。

准备工作

在开始打包之前,请确保:

安装打包工具

首先,我们需要安装PyInstaller:

pip install pyinstaller
提示:如果下载速度较慢,可以使用国内镜像源:
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

打包步骤

1准备项目文件

确保你的项目结构清晰,例如:

my_desktop_app/ ├── main.py # 主程序文件 ├── images/ # 图片资源目录 ├── config/ # 配置文件目录 ├── build/ # 打包相关文件目录 │ ├── icon.ico # 应用图标 │ └── version.txt # 版本信息 └── requirements.txt # 依赖列表
提示:将打包相关的文件(图标、版本信息等)放在build目录下,可以使项目结构更清晰。

2创建规范文件

创建一个spec文件到build目录:

pyi-makespec main.py --name "我的应用" --windowed --icon=build/icon.ico --specpath=build
参数说明:
  • --name:指定生成的exe文件名称
  • --windowed:创建Windows窗口应用(不显示控制台)
  • --icon:指定应用图标路径
  • --specpath:指定spec文件的生成位置

3修改规范文件

编辑build目录下生成的spec文件,配置资源文件和版本信息:

a = Analysis( ['../main.py'], # 使用相对路径 pathex=[], binaries=[], datas=[ ('../images', 'images'), # 包含图片目录 ('../config', 'config'), # 包含配置目录 ('../build/version.txt', '.') # 包含版本信息 ], ... ) # 设置应用信息 exe = EXE( pyz, a.scripts, [], exclude_binaries=True, name='我的应用', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=False, icon='icon.ico', version='version.txt' # 使用版本信息文件 )
说明:由于spec文件在build目录下,访问其他文件时需要使用相对路径。version.txt可以包含应用的版本号、公司信息等。

4执行打包

在项目根目录下执行打包命令:

pyinstaller build/我的应用.spec --distpath=build/dist --workpath=build/work
参数说明:
  • --distpath:指定生成的可执行文件存放目录
  • --workpath:指定临时文件存放目录

打包完成后,可执行文件会生成在build/dist目录下。这样所有的打包相关文件都集中在build目录中,方便管理。

优化打包

为了让打包的程序更加完善,可以考虑以下优化:

优化建议:
  • 使用--clean参数清理临时文件:pyinstaller --clean "我的应用.spec"
  • 使用UPX压缩可执行文件(需要另外安装UPX):pyinstaller --upx-dir=path/to/upx "我的应用.spec"
  • 排除不需要的模块以减小文件体积

常见问题

问题1:程序无法启动
解决方案:检查是否包含了所有必要的依赖和资源文件。可以在命令行中运行exe查看错误信息。
问题2:打包后的程序体积过大
解决方案:使用--exclude-module参数排除不需要的模块,或使用UPX压缩。
问题3:资源文件无法访问
解决方案:确保在spec文件中正确配置了datas参数,并使用相对路径访问资源。
问题4:杀毒软件报警
解决方案:这是误报,可以添加白名单或提交样本给杀毒软件厂商。

发布程序

打包完成后,你需要准备以下内容:

建议:可以使用Inno Setup等工具制作安装程序,让用户安装体验更好。

下一步

恭喜!你已经学会了如何打包和发布桌面程序。接下来你可以: