PyInstaller可以把Python应用程序及其所有依赖项捆绑到一个包中。用户可以在不安装Python解释器或任何模块的情况下运行打包的应用程序。PyInstaller支持Python 2.7和Python 3.3+,并支持诸如numpy,PyQt,Django,wxPython等主要Python软件包。
PyInstaller针对Windows,Mac OS X和Linux进行了测试。但是,它不是一个交叉编译器:要制作一个Windows应用程序,你需要在Windows中运行PyInstaller;在Linux中运行Linux应用程序等。PyInstaller已成功用于AIX,Solaris和FreeBSD,但未经过测试。
官方文档:https://pyinstaller.readthedocs.io/en/stable/
===============================================
0x01 安装
pip install pyinstaller
或者安装github上的develop版
pip install https://github.com/pyinstaller/pyinstaller/tarball/develop
0x02 使用方法
打包一个python文件(.py或者.pyw等后缀都没问题)
pyinstaller -F -w pcat.pyw
使用-F会在当前目录下的dist文件夹生成一个独立的exe文件,
而使用-D(默认选项)则会在当前目录下的dist文件夹生成一个文件夹存放exe以及所有依赖文件。
当py文件有窗体时使用-w,在windows下不会显示控制台,-w在*NIX系统里会被忽略。
0x03 先生成spec文件
如果不使用--specpath指定路径,会在当前目录下生成一个spec文件,pyinstaller是根据spec文件来创建exe文件。
这个spec文件也是可以先生成的:
pyi-makespec [options] pcat.spec
*其中的[options]代表各种参数
这里生成spec文件后,你可以对其进行修改后,再来安装
pyinstaller [options] pcat.spec
0x04 一些常用参数
-d #debug模式,可以得到运行时的跟踪
-p DIR #可以增加pyinstaller搜索模块的路径,多个路径以:分隔。默认site-packages目录下都是可以被识别的
--add-data <SRC;DEST or SRC:DEST> #增加非二进制文件到目录下,windows以;分隔而且得用双引号包含,而*NIX以:分隔
--add-binary <SRC;DEST or SRC:DEST> #增加二进制文件到目录下
-i <FILE.ico or FILE.exe,ID or FILE.icns> #给打包的文件添加图标
--version-file FILE #windows里可把版本信息注射到exe里
其中--add-data、-i 等以后有空补充详细点
而--version-file需要的版本信息文件是需要格式的,
切换到python安装目录下的\Lib\site-packages\PyInstaller\utils\cliutils下,有一个grab_version.py文件
python grab_version.py C:\Windows\System32\cmd.exe
会生成一个file_version_info.txt,里面版本信息的格式可以参考。