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

小结

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

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

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

 

 

 

posted @ 2018-12-20 18:30  枫奇丶宛南  阅读(313)  评论(0)    收藏  举报