PyQT 将程序打包生成exe文件
将程序打包生成exe文件
环境
编辑器:Sublime Text3
操作系统:win10
Python3
所需要的库:主要是PyQT5,因为加了一点拓展功能,所以还有sqlite3,Image,pyinstaller
pip3 install pyqt5
pip3 install pyqt5-tools
pip3 install sqilte3
pip3 install Image
pip3 install pyinstaller
首先是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 ...]
具体的命令是什么作用可以在网上查一查
这里说一下要用到的几个命令:
-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
当然也可以直接使用另外一个命令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')
其实通过对比,就可以发现,在shell或者说cmd命令行下输入得命令,最后都能在这个spec文件中找到对应得地方,所以也可以直接修改spec文件。
Analysis中得第一个参数就是我们得main文件
pathex里面的内容,就是-p后面跟的文件
hiddenimports 要导入的本地包
console=False #这个就是 -w或者-c
icon='logo.ico' 就是最后生成的程序图标
修改好这个spec文件,最后执行
pyinstaller PasswordManageSystem.spec
小结
至此,这个小小的项目就算完结了。
至于说给这个软件添加版本信息,帮助信息,或者要给它增加其他功能什么的,这个等学的比较深入的时候再说吧,
毕竟这只是一个练习项目而已,这么简单的功能

浙公网安备 33010602011771号