今天我们将学习pyinstaller, 利用其将Python 程序打包成Windows可执行的exe程序。
今日冒险片段上:
在结束浅析之地的冒险之后, 他们继续走, 便走到一片巨大山脉. 而出口只有眼前的这个洞穴. 而据米斯特对这个地方的了解, 这个区域叫蜘蛛洞穴. 是通往首都的毕竟之地. 但是在这个洞穴里面栖息这很多蜘蛛, 有些甚至携带剧毒. 听人劝, 吃饱饭. 因此了不起非常小心, 开始小心翼翼的通过洞穴.
什么是 pyinstaller
pyinstaller 是Python 提供的一个第三方拓展库模块. 它的功能是将我们的 Python 程序打包成可执行的 .exe 程序。
安装
方式一:pycharm安装
- 安装 pyinstaller 模块 在 pycharm 中操作:file-->setting-->Project:xxx -->Project interpretor,再点击(加号)
- 在新弹窗中输入要下载的第三方模块, 然后点击该模块, 最后点击左下角安装即可
方式二:命令行安装
命令行安装: 在命令行输入一下命令进行安装
pip install pyinstaller
使用
最基本的使用方式:
pyinstaller xxx.py
注意: 后面可以跟多个python文件, 但注意用空格隔开。
参数介绍
pyinstall 打包时, 可以跟各种参数, 这些参数用来拓展打包时需要的定制需求。
常用参数如下表所示:
参数名 | 作用 |
-F / --onefile | 打包一个成单个文件, 多个.py文件或者需要打包其他资源(图片,音频) 不要使用 |
-D / --onedir | 打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码 |
-w / –windowed/–noconsole | 程序启动的时候不会打开命令行 (只对Windows有效, 编写GUI程序时使用此参数有用) |
-i /–icon | 指定打包之后的.exe文件的图标 |
-n / –name=NAME | 指定打包之后的.exe 文件的名称 |
-v FILE /–version=FILE | 指定打包之后的.exe 文件的版本信息. FILE: 版本信息描述文件编写请点击查看 |
-a/--ascii | 不包含 Unicode 字符集支持 |
-d/--debug | 产生 debug 版本的可执行文件 |
-c /--console/ --nowindowed | 使用命令行执行(此参数默认开启) |
-v / --version | 查看当前pyinstaller版本 |
--add-data <源目录;目标目录or源目录:目标目录> | 将源目录文件额外打包到.exe程序所在目标目录. ; Windows下使用, :Linux下使用 |
-h/--help | 查看该命令帮助信息 |
利用自带帮助文档进行学习
下载pyinstaller 之后, 可以输入pyinstaller -h 或者 pyinstaller --help , 来查看其自带的帮助文档。
打包
(1) 方式一:利用命令行打包
利用上面所学到的参数,对文件进行打包。
- 将文件打包成 xxx.exe
pyinstaller -F xxx.py
- 将文件打包成 xxx.exe, 并且运行时不打开命令行(tkinter程序打包时使用)
pyinstaller -F -w xxx.py
- 打包上一章坦克大战源码 将源码打包成 坦克大战v1.0.1.exe 并且运行时不打开命令行, 将.\img\p1tankU.gif设置为程序图标, 并将当前.\img\目录下文件打包到 .exe程序运行所在目录, 且命名为.\img\
pyinstaller -w -D -i .\img\p1tankU.gif -n "坦克大战v1.0.1" tank26.py --add-data ".\img\;.\img\"
(2) 方式二:利用图形界面打包
auto-py-to-exe 用于将Python程序打包成可执行文件的图形化工具 该工具的作用是将我们的在图形化界面点击的选项转换成方式一中的命令。
- 安装方式 :pip install auto-py-to-exe
- 启动方式: 命令行输入 auto-py-to-exe
- 启动后, 我们只需要根据情况去选择, 然后点击底部蓝色按钮即可
今日冒险片段下:
洞穴里面的冒险可谓是百密一疏, 就在即将通过时. 由于了不起的放松导致一块岩石掉落到地上, 发出了刺耳的声音. 顿时各种蜘蛛蜂拥而来, 好在利用蜘蛛惧火的特性, 二人将其驱散. 但是随着而来的巨大虚影却让他们紧绷的精神中多了一丝凝重. 来着正式此地领主, 一只名为艾克洛索的巨大蜘蛛. 虽然它的身躯要比普通的蜘蛛打上几十倍, 但是敏捷倒是丝毫不比他们差. 在较为狭小的空间内四处跳动, 借以寻找到冒险家的破绽进而攻击. 了不起对这个仿佛拥有智慧的怪物不敢大意. 佯装要逃跑, 吸引其主动攻击, 然后米斯特借机偷袭. 纵然其能吐出强力蛛丝, 但在二人的合力围攻下, 艾克洛索逐渐败下阵来. 最终被二人击败, 与此同时一道金光闪过, 了不起成功晋升到lv28.