1、PyInstaller 简介
PyInstaller 是一个十分有用的第三方库,可以用来打包 python 应用程序,打包完的程序就可以在没有安装 Python 解释器的机器上运行了。
它能够在 Windows、Linux、 Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个 独立文件方便传递和管理。
PyInstaller 支持 Python 2.7 / 3.4-3.7。可以在 Windows、Mac OS X 和 Linux 上使用,但是并不是跨平台的,而是说你要是希望打包成 .exe 文件,需要在 Windows 系统上运行 PyInstaller 进行打包工作。
2、安装
一、安装Pyinstaller,命令pip install Pyinstaller
二、打包exe步骤:
cmd进入py程序项目目录,执行命令:pyinstaller -F -w --icon=xxx.ico main.py --noconsole。其中,-F表示生成单exe可执行文件,-w表示窗体程序,
–icon是设置exe的显示图标,'main.py’是程序的入口,–noconsole 表示不展示cmd窗口,反过来想看cmd窗口就改成–console。*.ico文件可以到网上ico矢量图在线转换工具处理
http://www.faviconico.org/
一阵刷屏之后,终于打出成功的提示
程序目录下多了几个文件夹:一个spec文件,build文件夹,一个dist文件夹,其中的dist文件夹内就是我们生成的exe应用程序
3、使用
其中, 表示打包成单独的 .exe 文件,这时生成的 .exe 文件会比较大,而且运行速度回较慢。仅仅一个 helloworld 程序,生成的文件就 5MB 大。
另外,使用 还可以指定可执行文件的图标;
表示去掉控制台窗口,这在 GUI 界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
PyInstaller 运行时会对脚本进行解析,并做出如下动作:
1、在脚本目录生成 helloworld.spec 文件;
2、创建一个 build 目录;
3、写入一些日志文件和中间流程文件到 build 目录;
4、创建 dist 目录;
5、生成可执行文件到 dist 目录;
执行流程:
运行完成后会生成 build 和 dest 两个目录:
dest 目录中可以找到可执行 .exe 文件:生成的可执行文件
4、注意事项
1、直接运行最终的 .exe 程序,可能会出现一闪而过的情况,这种情况下要么是程序运行结束(比如直接打印的 helloWorld),要么程序出现错误退出了。
这种情况下,建议在命令行 cmd 下运行 .exe 文件,这时就会有文本输出到窗口;
2、写代码的时候应当有个良好的习惯,用什么函数导什么函数,不要上来 import 整个库,最后你会发现你一个 100KB 的代码打包出来有 500MB;
3、当你的代码需要调用一些图片和资源文件的,这是不会自动导入的,需要你自己手动复制进去才行。不然 exe 文件运行时命令窗口会报错找不到这个文件。
导入方法:
假设程序中需要引入一个 文件,首先我们运行:
此时会生成一个 文件,这个文件会告诉 pyinstaller 如何处理你的脚本,pyinstaller 创建一个 exe 的文件就是依靠它里面的内容进行执行的。
正常情况下你不需要去修改这个 spec 文件,除非你需要打包一个 dll 或者 so 文件或者其他数据文件。
那么我们就需要修改这个 spec 文件:
修改为:
然后在生成 exe 文件:
然后生成的文件就可以正常引入外部文件了。
多文件打包:
多文件打包参考:https://blog.csdn.net/CholenMine/article/details/80964272
命令格式如下,下命令为一条命令,为方便显示做了分行处理:
pyinstaller [主文件] -p [其他文件1] -p [其他文件2]
–hidden-import [自建模块1]
–hidden-import [自建模块2]
以上为一整条命令
pyinstaller main.py -p mysql.py -p other.py --hidden-import mysql --hidden-import other
在目录结构:“程序根目录\dist\main\” 下可以找到生成的main.exe。将其他依赖文件拷贝进入“程序根目录\dist\main\” 下,即可运行
项目XXX举例,main和ico文件要放一起 -p 文件夹,因为项目下我创建了case、autodriver、data、page文件夹,文件夹里面放的*.py文件通过–hiddent-import指向,代码如下:
pyinstaller -F -i t.ico -w main.py -p case -p autodriver -p data -p page -p page --hidden-import workday.py --hidden-import auto_driver.py --hidden-import login.csv --hidden-import base_page.py --hiddent-import sub_page.py
注意:–hiddent-import是连在一起的,dist文件夹里面要把需要的问卷copy进来,然后整个dist文件夹就可以任意移动到其他位置,到时候运行*.exe文件就可以执行程序了
问题:
打包的时候使用了参数-c -F,是一闪而过,用-w -F的话cmd框都没出来,py脚本不是带界面的。
-D, --onedir 创建一个目录,包含exe文件和依赖文件,这是默认选项。
-F, --onefile 创建一个exe文件,所有依赖文件都打包进了这个exe文件,这个exe会比较大,但是我觉得方便使用。
-c, --console, --nowindowed 控制台,无界面,默认选项。
-w, --windowed, --noconsole 窗口无控制台。
解决方法:
1、利用dos环境直接打开exe文件或者将exe文件拖入,回车即可即可!
2、在原代码文件里面引入time包,然后代码最后加句:time.sleep(10) ,括号里的数字10,代表停留10秒。就不会一闪而过了。