PyInstaller打包exe文件并制作安装包教程


Over the past half year,先是完成了后台功能代码的实现,到前端界面的实现,再到两者之间的融合调用实现,就在原以为项目快要结束的时候,才发现最难的线程部分还未解决。ok,以上还没有结束,只能说将完成的应用打包做成一个像样的带有安装程序的可执行文件exe才算perfect!

本文主要分为两部分:一是如何将工程文件打包成exe? 二是如何将打包好的exe制作成安装包?除此之外,本篇文章还将介绍实战过程中遇到的问题及相应解决方法。

本项目的实验环境和工具如下:
Python 3.6.5 (64-bit), PyInstaller 3.5, nullsoft scriptable install system 3.02.1, VNISEdit.exe

一、 使用PyInstaller将写好的项目打包

(1)首先展示本文所用到的工程文件层次结构:
在这里插入图片描述
其中,main是主函数文件。

(2)生成主函数文件对应的SPEC文件,生成SPEC文件的常用方法如下所示;

  1. 进入主函数文件所在目录,按照如下代码生成spec文件:
E:\18\project>pyi-makespec main.py
  1. 新建后缀为spec的文件,内容直接复制下面的代码,加以修改即可。

spec的主要内容如下所示:

# -*- mode: python ; coding: utf-8 -*-
block_cipher = None

a = Analysis(['main.py','Ui_Func.py','function.py'],
             pathex=['E:\\18\\project'],
             binaries=[],
             datas=[('E:\\18\\project\\image','image'),('E:\\18\\project\\pysphere','pysphere')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False,icon='E:\\18\\project\\image\\udbs.ico')

上述代码相关解释如下所示:

  • Analysis:该元组中放置的是需要封装的多个python文件,python文件要放置在第一个列表中,若spec文件与需要封装的python文件不在同一个目录中,还需在数组的python文件前添加详细目录;
  • pathex:路径写环境变量,也就是需要封装的工程的路径;
  • binaries:这个列表的路径放置的是代码运行时所调用的环境或者依赖,例如配置的OpenCV、tensorflow等;如果不需要调用这些依赖,空列表也可以运行;
  • datas:这个列表中放置的是代码运行时调用的数据的路径,列表中第一个引号中放置数据路径, 第二个参数是data在exe中保存此资源的文件夹名;

(3) 开始执行打包操作
首先,进入至工程所在文件,使用PyInstaller工具进行打包,具体步骤及相应结果如下所示:

C:\Users\despacito>e:
E:\>cd 18\project
E:\18\project>pyinstaller -D main.spec -i image\0108.ico -w
183 INFO: PyInstaller: 3.5
184 INFO: Python: 3.6.5
185 INFO: Platform: Windows-10-10.0.18362-SP0
194 INFO: UPX is not available
197 INFO: Extending PYTHONPATH with paths
['E:\\18\\project', 'E:\\18\\project', 'E:\\18\\project', 'E:\\17\\project']
197 INFO: checking Analysis
197 INFO: Building Analysis because Analysis-00.toc is non existent
.......
65142 INFO: Updating resource type 24 name 1 language 0
65147 INFO: Appending archive to EXE E:\18\project\dist\main.exe
65189 INFO: Building EXE from EXE-00.toc completed successfully.

常见的pyinstaller的命令参数如下所示:

  • D:产生一个目录(包含多个文件)作为可执行程序;
  • w:去掉控制台窗口;
  • i:指定生成exe的图标;
  • F:生成单个可执行文件,即可以把应用打包成一个独立的exe文件。注意指令区分大小 写。这里是大写;不加该参数是一个带各种dll和依赖文件的文件夹。

至此,可观察到当前工程文件夹中多了build和dist目录,dist目录中包含了生成的exe文件。此时,如果直接双击该exe可能会出现如下问题:
在这里插入图片描述
出现该问题的原因在于该exe和数据文件不在同一路径下,而本项目用到的数据文件为’E:\17\project\image’,‘E:\17\project\pysphere’。因此解决方法是:将该exe放置在和数据文件的同一路径’E:\17\project’下。ok,登陆界面出来啦。
在这里插入图片描述

扫描二维码关注公众号,回复: 9557921 查看本文章

那么,问题来了,如何让 user(只有一个exe的拥有者)正常使用该应用?并且使得该应用的体验者感觉更加正式和规范?此时,就需要将该exe制作成一个安装程序,user 需先经过安装,再点击应用图标进行正常使用。

二、 将打包好的exe文件制作成安装包

本项目用到的安装包制作工具为NSIS VNISEdit编译器。VNISEdit编辑器是一款基于NSIS脚本下的代码编程工具。使用该工具时需要注意以下几点:

  1. 将该编辑器下载安装好后,切记先进行配置设置,否则在后期创建向导的过程中会出现编程语言选择空白的问题。
  2. 进行配置设置时,需下载安装NSIS文件夹压缩器,因为进行NSIS VNISEdit编译器配置设置时会用到NSIS文件夹压缩器下的相关文件,具体如下所示:
    (1)打开NSIS VNISEdit编译器,选择“配置”选项或者快捷键“Ctrl+F11”,如下:
    在这里插入图片描述
    (2) 紧接着进入如下界面,配置页的原始默认界面如下所示:
    在这里插入图片描述
    配置后的界面如下所示:
    在这里插入图片描述

即需将路径选项下的编译器和帮助条目更换成自己电脑本地的相关文件,而这两个文件均为NSIS文件夹压缩器下自带的。点击“确定”配置步即完成。

紧接着开始制作,具体步骤如下:
点击“文件”,选择新建脚本向导,具体如下图所示:
在这里插入图片描述
此时进入如下界面:
在这里插入图片描述
点击“下一步”,进行安装包的相关选项设置;
在这里插入图片描述
在这里插入图片描述
点击“下一步”,该页面选项均为默认;
在这里插入图片描述
进入应用程序的目录与授权信息设置,该页面需要修改授权文件,LICENSE.TXT文件在VNISEdit编辑器目录中。
在这里插入图片描述
按照以下图片内容进行相关设置。
在这里插入图片描述
在这里插入图片描述
最终导入的所有文件如下所示:
在这里插入图片描述

该页面均为默认项。
在这里插入图片描述
该页面也是默认项;
在这里插入图片描述
进行解除安装程序的设置,可修改解除安装程序图标;
在这里插入图片描述
在这里插入图片描述
配置结束可显示如下界面:
在这里插入图片描述
至此,制作安装包已经完成,进入相应目录下查看,如图:
在这里插入图片描述
双击开始安装即可。

最后,附上本项目的功能界面以作留念,哈哈哈哈。
在这里插入图片描述

发布了21 篇原创文章 · 获赞 6 · 访问量 8004

猜你喜欢

转载自blog.csdn.net/weixin_42128329/article/details/103885028