Vic's blog Vic's blog
首页
  • 前端文章

    • JavaScript
    • Vue
    • HTML
    • CSS
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • TypeScript笔记
    • JS设计模式总结笔记
  • 微服务
  • Database
  • Python
  • 学习笔记

    • Java面试宝典
    • 《一个人工智能的诞生》笔记
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • 学习笔记

    • 《Git》学习笔记
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 大数据
  • 微服务
  • Java面试
关于
  • 网站
  • 资源
  • Vue资源
  • Java面试真题汇总
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Vic xu

永远期待美好的事情将会发生
首页
  • 前端文章

    • JavaScript
    • Vue
    • HTML
    • CSS
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • TypeScript笔记
    • JS设计模式总结笔记
  • 微服务
  • Database
  • Python
  • 学习笔记

    • Java面试宝典
    • 《一个人工智能的诞生》笔记
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • 学习笔记

    • 《Git》学习笔记
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 大数据
  • 微服务
  • Java面试
关于
  • 网站
  • 资源
  • Vue资源
  • Java面试真题汇总
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 微服务

  • Python

    • Python语法总结
    • Python GUI编程(Tkinter)
    • PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)详细教程
    • Qt Designer工具的使用
    • PyQt-内置信号和槽
    • PyQT将程序打包生成exe文件
      • 环境
      • pyinstaller
      • 实践
      • 小结
  • database

  • 学习笔记

  • 后台
  • Python
VIC
2021-01-27

PyQT将程序打包生成exe文件

# 环境

操作系统:win10

Python3

所需要的库:主要是PyQT5,因为加了一点拓展功能,所以还有sqlite3,Image,pyinstaller

pip3 install pyqt5
pip3 install pyqt5-tools
pip3 install sqilte3
pip3 install Image
pip3 install pyinstaller

1
2
3
4
5
6

首先是pyqt5, 这个是我们的主要工具,用来做界面的,pyqt5-tools这个库主要是是在用QT Creator设计好界面之后,将ui文件转化为py文件;

sqlite3这个库可以安也可以不安,因为pyqt5里面有一个模块QtSql,它支持sqlite的操作; Image这个库主要是用来处理一下图片资源,以及最后程序的图标的 pyinstaller 最后将程序转化为可执行的exe文件

# pyinstaller

这里使用的打包工具是pyintaller,当然还有别的工具,这里就不再关注了。

pyinstaller安装好之后,通过pyinstall -h 可以看到一些帮助命令

$ pyinstaller -h
usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
                   [--add-data <SRC;DEST or SRC:DEST>]
                   [--add-binary <SRC;DEST or SRC:DEST>] [-p DIR]
                   [--hidden-import MODULENAME]
                   [--additional-hooks-dir HOOKSPATH]
                   [--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES]
                   [--key KEY] [-d [{all,imports,bootloader,noarchive}]] [-s]
                   [--noupx] [-c] [-w]
                   [-i <FILE.ico or FILE.exe,ID or FILE.icns>]
                   [--version-file FILE] [-m <FILE or XML>] [-r RESOURCE]
                   [--uac-admin] [--uac-uiaccess] [--win-private-assemblies]
                   [--win-no-prefer-redirects]
                   [--osx-bundle-identifier BUNDLE_IDENTIFIER]
                   [--runtime-tmpdir PATH] [--bootloader-ignore-signals]
                   [--distpath DIR] [--workpath WORKPATH] [-y]
                   [--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]
                   scriptname [scriptname ...]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

具体的命令是什么作用可以在网上查一查

这里说一下要用到的几个命令:

-i icon.ico 为程序设置图标 (注意图标大小格式有要求,一般128*128基本能满足要求) -F:表示是单文件exe -w,–windowed,–noconsole 使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效) -c,–nowindowed,–console 使用控制台子系统执行(默认)(只对Windows有效) -p 文件名 依赖的文件名字,即导入的本地文件或者资源文件 --hidden-import 导入的文件名

我的理解是-p 与--hidden-import一般一起使用,比如要导入images.py这个本地资源包,得如下使用:

pyinstaller -i logo.ico -w -F PasswordManagerSyster.py -p images.py --hidden-import images
1

当然也可以直接使用另外一个命令pyi-makespec 程序文件 ,生成spec文件(执行完上面一条命令也会生成一个spec文件)

spec文件如下:

# -*- mode: python -*-
block_cipher = None
a = Analysis(['PasswordManageSystem.py'],
             pathex=['images.py', 'C:\\code\\Python\\PyQT5test\\PasswordManagerSystem'],
             binaries=[],
             datas=[],
             hiddenimports=['images'],
             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='PWManager',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=False , icon='logo.ico')
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

其实通过对比,就可以发现,在shell或者说cmd命令行下输入得命令,最后都能在这个spec文件中找到对应得地方,所以也可以直接修改spec文件。

Analysis中得第一个参数就是我们得main文件

pathex里面的内容,就是-p后面跟的文件

hiddenimports 要导入的本地包

console=False #这个就是 -w或者-c

icon='logo.ico' 就是最后生成的程序图标

修改好这个spec文件,最后执行

pyinstaller PasswordManageSystem.spec
1

# 实践

除了命令行,也可以直接使用pycharm的External Tools 安装 pyinstaller工具

使用打包命令

pyinstaller -F -w C:\Users\JulianYang\Desktop\testJ\milestone\camera1.py
1

选择配置参数

program: E:\PycharmProjects\untitled\venv\Scripts\pyinstaller.exe

Arguments: -F -w $FileNameWithoutExtension$.py

working directory:$FileDir$

打开dist目录下生成的main.exe 错误提示:failed to cecute script main

PyQt5 Pyinstaller Failed to execute script部分解决方法

  1. 取消 -w 参数,让他显示命令窗口;
  2. 按住shift,右击鼠标,选择 “在此处打开powershell”(或命令窗口);
  3. 将生成的exe拖入,按回车;
  4. 可以看到具体的报错信息;
  5. 如果是“unable to find Qt5xx.dll”,就将Python安装路径下的**/Lib/site-packages/PyQt5/Qt/bin**添加到环境变量;
  6. 如果是“no module xxx”,就pip install安装对应的模块;
PS E:\PycharmProjects\Calculation_Tree_Tool\treeTool\dist> E:\PycharmProjects\Calculation_Tree_Tool\treeTool\dist\main.exe
Traceback (most recent call last):
  File "main.py", line 19, in <module>
ModuleNotFoundError: No module named 'treeTool'
[3516] Failed to execute script main
PS E:\PycharmProjects\Calculation_Tree_Tool\treeTool\dist>
1
2
3
4
5
6

查看导入的包路径:from treeTool.mwin import Ui_MWin

发现是导入路径中多了一层包路径,导致运行时从对应的路径无法导入模块。

项目路径:E:\PycharmProjects\Calculation_Tree_Tool\treeTool

去除子目录treeTool,将所有源文件移到根目录,重新打包exe,运行成功!

# 小结

至此,这个小小的项目就算完结了。

至于说给这个软件添加版本信息,帮助信息,或者要给它增加其他功能什么的,这个等学的比较深入的时候再说吧,

毕竟这只是一个练习项目而已,这么简单的功能

编辑 (opens new window)
#工#具# #P#y#t#h#o#n
上次更新: 2021/06/18, 19:15:44
PyQt-内置信号和槽
Oracle查看SQL执行计划

← PyQt-内置信号和槽 Oracle查看SQL执行计划→

最近更新
01
万字长文:选 Redis 还是 MQ,终于说明白了!
10-11
02
Typora+gitee+自定义命令实现图床
09-13
03
字节终面:两个文件的公共url怎么找?
09-09
更多文章>
Theme by Vdoing | Copyright © 2019-2022 Vic | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×