前言

对于做网站的我来说,有一个好用的能管理网站的图片的工具确实很实用,但是网络上比较流行的 PicGo 不能从 github 网站上读取图片,所以就是在下载 PicGo 之后是无法使用它读取到 github 上之前上传的图片的,而且我用的时候老是上传失败,所以就自己利用 PyQt 做了一个软件,用以实现这些功能,并且可以对 github 上的图床进行管理。写完测试完成之后,又想把这东西打包成安装包,那之后的使用就很方便了,所以就有了此文章

感兴趣的可以看看这个软件 GitPic

将 PyQt 项目打包为可执行文件

可以利用可视化的工具,Auto-py-to-exe,实际上也是一个基于 Pyinstaller 的工具,但是它有 Gui 界面,能更方便的打包

安装

在终端输入

1
pip install auto-py-to-exe

安装完成之后,就可以在终端中输入 auto-py-to-exe.exe 打开软件

打包流程

软件如图所示

1750612284702.png

基本上只需要设置上述的几个选项

  • Script Location:选择脚本文件的位置,只需要选择一个脚本文件,这个脚本文件需要包含 python 的入口函数,即 if __name__ == "__main__":
  • Onefile:选择打包的结果文件是单个文件还是文件夹
    • One File 打包之后生成一个该程序的可执行文件
    • One Directory 打包之后除了生成 .exe 文件之外还会生成一个文件夹
  • ConSole Window:打包生成的软件是否是基于终端的软件,一般选择隐藏终端
  • Icon:软件图标
  • Additional Files:额外文件,可以选择文件或者文件夹,可以将软件所用到的图片、字体等文件包含进去

设置完成这几个选项之后就可以打包了,打包结果一般会在当前终端的目录下生成一个 output 文件夹,打包结果都被存放在其中

但是需要注意的是,如果有用到额外文件的话,不论上述的 Onefile 选项选择哪个都会有问题。一般在程序中使用的文件都是其相对路径,所以需要将对应的文件也放到其正确的相对路径下,例如在代码中所用到图片的路径为 ./img/xxx.png ,那么就需要将 img 文件夹放在生成的可执行文件的同级目录下,之后软件即可使用

1750613290537.png

将可执行文件打包为安装包

在这里使用 Inno Setup 软件来将可执行文件打包为安装包

安装

可以从官网上获取最新版本下载安装

创建 Inno Setup 脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
; 软件名
AppName="GitPic"
; 软件版本号
AppVersion="1.0.2"
; 设置安装过程中显示的版本号
AppVerName="GitPic 1.0.2"
; 设置发布者名称
AppPublisher="落"
; 发布者网址
AppPublisherURL="https://seashore.top"
; 默认安装路径
DefaultDirName={autopf}/GitPic
; 输出的文件的路径
OutputDir=setup
; 输出的安装包文件名
OutputBaseFilename=GitPic_setup
; 是否启用实体(solid)压缩,将所有文件压缩为单个压缩块
SolidCompression=yes
; 程序和功能中的icon图标
SetupIconFile=./gitpic_128x128.ico
UninstallDisplayIcon=./gitpic_128x128.ico

; 需要的外部文件,并且定义安装之后在软件的相对位置
[Files]
Source: "output/*"; DestDir: {app}; Flags: ignoreversion recursesubdirs
Source: "fonts/*"; DestDir: {app}/fonts; Flags: ignoreversion recursesubdirs
Source: "img/*"; DestDir: {app}/img; Flags: ignoreversion recursesubdirs

[Languages]
; 设置安装程序的语言为英文
Name: "english"; MessagesFile: "compiler:Default.isl"

; 用户自定义任务
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: exclusive

[Icons]
Name: "{autoprograms}\GitPic.exe"; Filename: "{app}\GitPic.exe"
Name: "{autodesktop}\GitPic.exe"; Filename: "{app}\GitPic.exe"; Tasks: desktopicon

; 卸载之后删除安装目录
[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
InstallDir: String;
begin
InstallDir := ExpandConstant('{app}');

case CurUninstallStep of
usUninstall:
begin
if DirExists(InstallDir) then
DelTree(InstallDir, True, True, True);
RemoveDir(ExtractFileDir(InstallDir));
end;
end;
end;

生成安装包

在 Inno Setup 软件中打卡该文件,然后点击右上角的编译即可生成安装包